spring-单元测试概要

前言

单元测试是日常开发重要的一环,全面的单元测试能够及时发现bug,为整个系统提供安全可靠的代码单元。当然,作为后端程序,也要进行单元测试才能保证代码的准确性。

新建单元测试

单元测试放在一个类里面,单元测试类和代码类一般一一对应。

进入到代码类,右键类型,点击Go To > Test。如果没有测试类,提示新建测试类。

注解

进行spring-boot程序单元测试时,需要添加@SpringBootTest注解,导入测试相关的组件。

进行单元测试时,服务器无需启动。

@SpringBootTest

注解表明这是一个spring-boot单元测试类。

@SpringBootTest
class Task2ApplicationTests {

  @Test
  void contextLoads() {

  }

}

@RunWith(SpringJUnit4ClassRunner.class)

注解表明测试使用Spring容器,并且从容器中注入对象。如果运行过程中报无法注入对象,请添加这个注解。

@RunWith(SpringJUnit4ClassRunner.class)

@Transactional

一般情况下,单元测试调用接口时,如果有数据库操作,会对数据库进行修改。为了只测试接口的逻辑是否正确,可以在测试类上添加@Transactional注解,这样测试单元的所有修改操作在测试结束后会被还原。

@Transactional
@SpringBootTest
class UserControllerTest {
  @Test
  void lock() throws Exception {
    MockHttpServletResponse result = mockMvc.perform(
        MockMvcRequestBuilders.patch("/users/{id}/state", 1)
            .param("locked", "true")
    ).andReturn().getResponse();
    System.err.println(result.getStatus() + "|" + result.getContentAsString());
  }
}

@TestPropertySource

指定单元测试的属性配置文件。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = UserApplication.class)
@TestPropertySource(properties = {"classpath:bootstrap.yml"})
public class UserControllerTest {
	
}

MockMvc

创建MockMvc的方法有两种,可以通过MockMvcBuilders来创建。

public final class MockMvcBuilders {
	public static DefaultMockMvcBuilder webAppContextSetup(WebApplicationContext context) {
		return new DefaultMockMvcBuilder(context);
	}
	public static StandaloneMockMvcBuilder standaloneSetup(Object... controllers) {
		return new StandaloneMockMvcBuilder(controllers);
	}
}

一种是DefaultMockMvcBuilder,另外一种是StandaloneMockMvcBuilder,两种的区别是:

  • DefaultMockMvcBuilder需要传入一个上下文WebApplicationContext,构造器从上下文对象获取控制器。
  • StandaloneMockMvcBuilder直接传入控制器。

创建请求

使用MockMvcRequestBuilders对象来创建请求。

MockHttpServletRequestBuilder request = MockMvcRequestBuilders.patch("/users/{id}/state", 1)
            .param("locked", "true")

MockMvc执行请求

MockHttpServletResponse response = mockMvc.perform(request).andReturn()

处理结果

response.getStatus()
response.getContentAsString()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值