SpringBoot + Junit5 + MockMvc 写单元测试

 1.1  junit5  版本5.6.0  pom文件如下:

<properties>
    <junit.jupiter.version>5.6.0</junit.jupiter.version>
</properties>

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>${junit.jupiter.version}</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </exclusion>
    </exclusions>
</dependency>

  

1.2 test 测试类里面  首先先构建mockMvc的环境

@SpringBootTest
@ExtendWith(SpringExtension.class) //导入Spring测试框架
@DisplayName("人员ctr测试")
public class PersonControllerTest {


    @Autowired
    private PersonController personController ;

    private MockMvc mockMvc;



    @BeforeEach
    public void setUp() {
        MockitoAnnotations.initMocks(this);//这句话执行以后,service自动注入到controller中。
        // (1)构建mvc环境
        mockMvc = MockMvcBuilders.standaloneSetup((personController)).build();
    }
}

  

 

 

 

  1.3  开始编写测试方法  

    1.2.1  Junit5最大的变化就是可以传参 ,简单介绍一下用法

         @ValueSource(strings = {"111","222"}) //多个参数执行多次(即id为111执行一次后还会执行id为222) ,参数为字符串类型 public void test(String id){}
       @MethodSource("getPerson")  //参数为方法,方法里面你可以写你想要的数据格式 ,比如getPerson返回的JSONObject格式 public void test(JSONObject jsonobject){}
         @ParameterizedTest //需要传参数时需要使用, 跟上面的注解是配套用的


   1.2.2 MockMvc的使用:模拟对象去调用,真正实现单元测试

       1. mockMvc.perform(MockMvcRequestBuilders.get("/v1/user/get_info") //请求构建mvc环境时的controller层里面的地址 , 可以get、post、put请求

       2. .contentType(MediaType.APPLICATION_FORM_URLENCODED) //设置内容格式 ,当为post请求时要使用 .accept()设置接收格式,和内容的格式一样

       3. post传参使用 .content(JSONObject.toJSONString(personIds))//设置内容

       

@Test
    @DisplayName("根据id_获取人员信息")
    @Order(1) //顺序
   // @MethodSource("getPerson")  //参数为方法
    @ValueSource(strings = {"111","222"}) //多个参数执行多次
    @ParameterizedTest //需要传参数时使用
    public void getPersonById(String id) throws Exception {
      

        MockHttpServletResponse response = mockMvc.perform(MockMvcRequestBuilders.get("/v1/person/get_info")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED) //设置内容格式
                .param("personid",id)//设置内容
                )
                .andDo(MockMvcResultHandlers.print())//返回打印结果
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andReturn().getResponse();
        response.setCharacterEncoding("UTF-8"); //解决中文乱码问题

        Result<PersonDTO> result = JSONObject.parseObject(response.getContentAsString(), Result.class);//反序列化成对象
        Assertions.assertTrue(result.getDataStore() != null);  //断言结果校验
    }

  

1.4 测试成功

 

posted @ 2021-10-14 17:28  不是安逸  阅读(654)  评论(0编辑  收藏  举报