SpringBoot单元测试

1,163 阅读1分钟

SpringBoot测试

单元测试(unit testing)

是指对软件中的最小可测试单元进行检查和验证,单元测试是在软件开发过程中要进行的最低级别的测试活动

Java里单元指一个类。

模拟测试(mock testing)

就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。

这里我们创建一个父类,单元测试继承它即可 这里有四个注解

@RunWith(SpringRunner.class)@SpringBootTest(classes = AssetApplication.class) 指在Spring环境下运行 @Transactional启用事务 @Rollback 完成后进行回滚

package com.test;


import cn.com.topsec.ti.assetmanage.AssetApplication;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

/**
 * 单元测试继承该类即可
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AssetApplication.class)
@Transactional
@Rollback
public abstract class Tester {}

单元测试的位置

Service测试

service层做单元测试,即注入Service对象.逐个对每个方法的输入输出做测试

Controller测试

Controller测试,即API测试,是模拟使用HTTP来测试所有接口,一套完备的单元测试会大大减少测试花费的时间


@AutoConfigureMockMvc
//@AutoConfigureMockMvc注解,该注解表示启动测试的时候自动注入 MockMvc
public class EmployeeControllerTest extends Tester {

    @Autowired
    protected MockMvc mockMvc;


    @Test
    public void list() throws Exception {
        MvcResult result =  mockMvc.perform(
                MockMvcRequestBuilders.get("/xxxx/xxxxx")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .param("page","1")
                .param("size","10")).andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }
}

@MockBean的使用

在实际开发中,我们自己写的Controller、Service很可能去调用别的同事或别的项目组写的Service、Mapper,对方可能只写了一个接口,没有实现(比如本例中我写的Mapper),这样是没法进行测试的。

Mock的作用:创建一个虚拟的对象替代那些不易构造或不易获取的对象。