Juint-单元测试

在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注入用户登录信息,或者修改登录拦截器取消对单元测试的登录验证。

注解说明



笔记摘自:遇见狂神说《Spring Boot从入门到实战》-章为忠

猜你喜欢

转载自blog.csdn.net/weixin_44773109/article/details/127684994