SpringBoot Test junit4

测试好处多多。但在 spring boot 里写测试,别说得到好处,就连把测试框架搭对都不是个简单的事。

毋庸置疑, 相对于 Golang, python 的网络测试框架, java 里 spring 里的测试框架真是复杂的可以. 约定优于配置, 这约定漫天飞舞藏在文档的各个角落. 版本还不统一.

一般我们写后端逻辑分 3 层, Controller -> Service -> Repository,简单来说,

对于单元测试,我们只针对某一个功能点写测试

而对于集成测试,我们会集成多个功能。

spring boot 为这两种测试,都提供了具体的约定方法。

spring boot 启动慢,我们测试时应该尽可能的只启动我们需要的类。 怎么做到呢?

spring boot 分层测试

我们看上面 spring 简化的请求图。 如果是单元测试。我们应该只对 3 测(依赖 4),只对 4 测(依赖 5)。 而集成测试,我们应该是可以测 1 到 5. 当然,这个界定根据你的需求来。

在测试前,我们先把 pom 的包统一下.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
    <relativePath/>
</parent>
​
<dependencies>
   <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
​
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
​
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

完整源码地址: https://github.com/zk4/spring_test_demo

测试场景

我们要将测试场景列个矩阵

不加载 spring 框架 的单元测试

这是最灵活也是最快的一种方案

拿 Controller 举例

Controller 其实就是一个类. 理论上 new 出来测就行了

但问题是: Controller 里会被 Spring 注入一堆东西.

简单的解决方法是:

不要在成员上加 @Autowired, 而是在构造时自动注入. 这也是 Spring 官方的推荐做法.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值