SpringBoot 单元测试入门实践

前言

软件测试的重要性毋庸置疑。大部分公司主业务的支撑软件,在开发时都会要求编写测试。在日常开发中,也有不少要求我们写测试的场景,例如你将要开源扩展包,拥有完整测试永远是加分项 💯。

项目环境

  • JDK 14
  • Gradle 6.3
  • macOS 10.15
  • SpringBoot 2.3.4

JUnit 介绍

大部分新手在测试程序的时候,喜欢用 System.out.println() 方法,直接把结果打印出来,看看结果是否符合预期。这种方法在测试代码量很小、逻辑简单的程序时很方便。在实际生产项目中,我们可以尝试一下 JUnit 工具。

JUnit 是 Java 语言的测试框架。它可以根据测试数据来验证程序正确性,并且测试代码与工程代码分离。只要在方法上加上 @Test 注解,JUint 就能识别到这个方法。

引入依赖

这里我们使用的构建工具是 gradle,所以打开 build.gradle 文件引入依赖。该依赖包含了 JUnit 等,所以无需再单独引入 JUnit。

implementation 'org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE'

测试 Service 层

编写一份 DemoService 接口,该接口只有一个 sayHelloTo 方法来用于我们简单的单元测试。

public interface DemoService {
    /**
     * Hello World!
     * @param name 名称
     * @return String
     */
    String sayHelloTo(String name);
}

创建 DemoServiceImpl 类,实现 DemoService 接口。这里可使用 ⌥ + ⏎ 快速创建接口实现类。

@Service
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHelloTo(String name) {
        return "say hello to " + name;
    }
}

SpringBoot 的单元测试写在 src/tests 目录下,如果你使用的是 IDEA IDE,可按下 ⇧ + ⌘ + T 来快速创建测试文件。

@SpringBootTest
class DemoServiceTest {
    @Autowired
    private DemoService demoService;
    @Test
    void sayHelloTo() {
        String result = demoService.sayHelloTo("developer");
        Assertions.assertEquals("say hello to developer", result);
    }
}

上面就是最简单的单元测试写法,注入 @SpringBootTest 注解即可。想要执行的时候,鼠标放在对应的方法,右键选择 run。

测试 Controller 层

编写一份 DemoController,创建一个 sayHelloTo 方法,并且注入 DemoService 接口。

@RestController
public class DemoController {
    @Autowired
    private DemoService demoService;

    @GetMapping("demo")
    public String sayHelloTo(String name) {
        return demoService.sayHelloTo(name);
    }
}

沿用 ⇧ + ⌘ + T 快捷键创建控制器测试类,这里用到了 MockMvc,MockMvc 是由 spring-test 包提供,实现了对 HTTP 请求的模拟,能够直接使用网络的形式,转换到 Controller 的调用,使得测试速度快、不依赖网络环境。同时提供了一套验证的工具,结果的验证十分方便。

@AutoConfigureMockMvc
@SpringBootTest
class DemoControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void sayHelloTo() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/demo?name=developer"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("say hello to developer"))
                .andDo(MockMvcResultHandlers.print());
    }
}

这里简单的使用 MockMvc 测试 API 接口返回的 HTTP STATUS CODE 以及返回的内容,并将整个响应结果输出出来。

总结

这里非常简单的过了一遍 SpringBoot 单元测试流程,也只是作为一个入门实践记录在这儿。对 JUnit 和 MockMvc 有了一个最基础的认识,有兴趣的伙伴可以自己查询一些资料进行深入学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值