单元测试-spring-boot-starter-test+junit5

发布时间:2024年01月15日

前言:

开发过程中经常需要写单元测试,记录一下单元测试spring-boot-starter-test+junit5的使用


引入内容:

引用jar包

<!-- SpringBoot测试类依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<!-- junit -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>

注入service\mapper代码测试:

可以对局部函数、方法进行调用测试

import java.util.*;
import java.util.stream.Collectors;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class DServerLocalApplicationTests {

    @Autowired
    AService aService;
    @Autowired
    private AMapper aMapper;
    @Autowired
    private BMapper bMapper;

    @Test
    void test() {
        List<A> a= aMapper.selectList(null);
        List<B> b = bMapper.selectList(null); 
        ...
        
    }
}

测试restful接口:

可以对API调用进行模拟测试

/**
 * @author CH
 * @version 1.0   单元测试模板案例
 * @data 2023/6/6 14:12
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
public class TestTemplateTests {

    // MockMvc是Spring提供的专用于测试Controller类
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext wac;

    @Before
    public void setup() {
        // 初始化MockMvc对象;
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Before
    public void init() {
        log.info("开始测试...");
    }

    @After
    public void after() {
        log.info("测试结束...");
    }

    /***
     * 加@Transactional可以对单元测试执行的结果进行回滚,不会产生脏数据
     */
    @Transactional
    @Test
    public void getTest() throws Exception {
        ResultActions resultActions = mockMvc.perform(
                MockMvcRequestBuilders
                        // URL =>注意:在测试类中,不需要将根路径写进去 ,还有很多调用方式post\put\delete
                        .get("/appAssets/assetsTest")
                        // 参数格式
                        .contentType(MediaType.APPLICATION_JSON)

                // 传参格式很多
//                        .content(JSONObject.toJSONString(""))
//                        .header()
//                        .param()
        );
        MvcResult mvcResult =
                resultActions
                        // 接口调用状态
                        .andExpect(MockMvcResultMatchers.status().isOk())
                        // 打印结果数据
                        .andDo(MockMvcResultHandlers.print())
                        .andReturn();

        // 取到结果进行断言
        Result result = JSON.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);

        // 对结果进行断言
        Assertions.assertEquals("操作成功", result.getMessage());
        Assertions.assertEquals(200, result.getStatus());
    }

}
文章来源:https://blog.csdn.net/weixin_44111939/article/details/135595062
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。