Springboot 单元测试怎么使用解读

SpringBoot单元测试

// 注解部分
 @RunWith(SpringRunner.class)
 @SpringBootTest
 public class ApplicationTest {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mvc;
    
    @MockBean
    private AuthInterceptor authInterceptor;

    @MockBean
    private AuthInitEvent authInitEvent;

    @MockBean
    private AuthUtil authUtil;
    
    @Before
    public void setupMockMvc(){
        mvc = MockMvcBuilders.webAppContextSetup(context).build(); //初始化MockMvc对象
    }
	
	@Test
	@Transactional
	public void test() {
		String jsonString = JSONObject.toJSONString();
           
		// Mock部分
	    Mockito.when(authInterceptor.preHandle(Mockito.any(HttpServletRequest.class),
        						Mockito.any(HttpServletResponse.class),
        						Mockito.any(Object.class)))
        						.thenReturn(true);
        Mockito.when(authUtil.getLoginUser()).thenReturn(null);
        doNothing().when(authInitEvent).afterPropertiesSet();

		// 请求部分
        MvcResult mvcResult = mvc.perform(
                post("/save")
                        .accept(MediaType.APPLICATION_JSON_UTF8)
                        .contentType(MediaType.APPLICATION_JSON_UTF8)
                        .content(jsonString)
        )
                .andExpect(status().isOk())
                .andDo(print())
                .andReturn();
        // 结果断言部分        
        String contentAsString = mvcResult.getResponse().getContentAsString();
        Assert.assertNotNull(contentAsString);
        Assert.assertEquals(200, JSONObject.parseObject(contentAsString).get("code"));
	}
}

从上面的代码可以看出一个单元测试大概可以分为一下几部分:

  • 注解部分
  • Mock部分
  • 请求部分
  • 结果断言部分
注解部分
  • @RunWith(SpringRunner.class)
@RunWith是Junit的注解,这个注解的作用是为了指定测试的运行环境,因为不同的框架会有不同的运行环境,
供其他框架实现。这里的SpringRunner.class,就是Spring框架的实现,提供了Spring容器的运行环境。
这样就可以让依赖自动注入了。

@SpringBootTest

该注解提供了两个属性用于配置:
webEnvironment:指定Web应用环境,它可以是以下值
   	MOCK:提供一个模拟的 Servlet 环境,内置的 Servlet 容器没有启动,配合可以与@AutoConfigureMockMvc 
   					结合使用,用于基于 MockMvc 的应用程序测试。
   	RANDOM_PORT:加载一个 EmbeddedWebApplicationContext 并提供一个真正嵌入式的 Servlet 环境,
   					随机端口。
   	DEFINED_PORT:加载一个 EmbeddedWebApplicationContext 并提供一个真正嵌入式的 Servlet 环境,
   					默认端口 8080 或由配置文件指定。
   	NONE:使用 SpringApplication 加载 ApplicationContext,但不提供任何 servlet 环境。
classes:指定应用启动类,通常情况下无需设置,因为 SpringBoot 会自动搜索,直到找到 
   			@SpringBootApplication@SpringBootConfiguration 注解。
  • Mock部分
    Mock部分主要解决什么问题呢,比如某个接口你在测试的时候需要检测内存中的登录状态,
    但是登录很麻烦,这时候你找到负责检测登录的类,可以Mock一个这个对象,编排他的行为,比如:调用这个对象的检测用户登录状态的方法时,你可以直接返回true。这个对象会自动代替,容器里面的相同的对象,进行依赖注入,从而当你在测试的时候系统调用用户登录状态检查时,会按照你编排的行为进行返回。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值