在java se的学习中,我们要测试代码一般都是通过运行main方法来进行。通过Juint单元测试可直接运行测试方法,而不用通过main方法。
普通Maven项目
方法使用注解@Test,可以直接运行测试,而不通过main方法(maven项目)
依赖:(一般新建的maven项目都会带有这个依赖)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>compile</scope>
</dependency>
在方法上使用注解@Test。@Test注解只有在方法上有效,只要加了这个注解的方法就可以直接运行。
若还未导入依赖可以按快捷键Option+Enter,选择导入相应的依赖。会自动添加依赖配置到pom文件中,并且自动下载相应jar包。(Maven项目的pom文件,点这里复习一下)
若已经导入了依赖,按快捷键Option+Enter后选择导入相应的包,import class
。一般导入的包名为:import org.junit.Test;
方法的左侧会出现一个小三角形按钮。该按钮就是运行按钮。
测试
与运行main方法是一样的。绿色就是程序正常运行没有发生错误。
红色报警,就是程序出了错误。
SpringBoot项目
目前流行的有JUnit或TestNG等测试框架。Spring Boot封装了单元测试组件spring-boot-starter-test。
SpringBoot项目中使用单元(Junit)测试。一般情况下Test文件夹内会有一个测试类,可直接在里边进行单元测试。
简单测试
步骤:
一、新建
新建一个类作为测试类或者选择需要测试的类或方法,然后在对应的类中右击,选择Go To→Test→Create New Test。
二、注解配置
-
使用注解@SpringBootTest标记测试类
- 在类的上面添加@SpringBootTest注解,系统会自动把这段程序加载到Spring Boot容器
-
使用注解@RunWith(SpringRunner.class)标记测试类(使用IDEA可以不添加)- @RunWith(SpringRunner.class)注解是一个测试启动器,可以加载Springboot测试环境。
- 需要从容器中获取实例(@Autowired自动装配)是需要加上该注解,否则空指针。
-
使用注解@Test标记测试方法
- @Test注解表示该方法为单元测试方法。
-
测试对象可以使用注解@Autowired进行自动装配。
模拟HTTP请求
spring-boot-starter-test具备强大的Mock能力,使用@WebMvcTest等注解实现模拟HTTP请求测试。
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void hello() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.post("/hello") //执行一个请求
.contentType(MediaType.APPLICATION_JSON)) //接收的数据类型
.andExpect(status().isOk()) //添加执行完成后的断句,请求的状态响应码//是否为200,如果不是则测试不通过
.andDo(print()); //添加一个结果处理程序,表示要对结果进行处理,比如此处//使用print()输出整个响应结果信息
}
}
示例代码说明如下:
MockMvcRequestBuilders.post(“/hello”):构造一个post请求。
contentType (MediaType.APPLICATION_JSON)):设置JSON返回编码,避免出现中文乱码的问题。
andExpect(status().isOk()):执行完成后的断句,请求的状态响应码是否为200,如果不是则测试不通过。
andDo(print()):添加一个结果处理程序,表示要对结果进行处理,比如此处调用print()输出整个响应结果信息。
如果接口有登录验证,则需要通过MockHttpSession注入用户登录信息,或者修改登录拦截器取消对单元测试的登录验证。