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的使⽤:模拟对象去调⽤,真正实现单元测试
spring boot选择题
1. mockMvc.("/v1/user/get_info") //请求构建mvc环境时的controller层⾥⾯的地址,可以get、post、put请求
2. .contentType(MediaType.APPLICATION_FORM_URLENCODED) //设置内容格式,当为post请求时要使⽤ .accept()设置接收格式,和内容的格式⼀样
3. post传参使⽤ .JSONString(personIds))//设置内容
@Test
@DisplayName("根据id_获取⼈员信息")
@Order(1) //顺序
// @MethodSource("getPerson") //参数为⽅法
@ValueSource(strings = {"111","222"}) //多个参数执⾏多次
@ParameterizedTest //需要传参数时使⽤
public void getPersonById(String id) throws Exception {
MockHttpServletResponse response = mockMvc.("/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.ContentAsString(), Result.class);//反序列化成对象 Assertions.DataStore() != null); //断⾔结果校验
}
1.4 测试成功
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论