junit 内部类测试_JUnit 5使用Mockito 2进行测试

cf6f6dde3eb7512028d541133cc7d928.png

JUnit 5 刚出来那时,也就是第一个版本 5.0.0 时,还不能很好的支持 Mockito 的测试,因为 Mockito 没能跟得那么紧密。那时候 JUnit 5 只能试验性的提供了一个极不正式的 com.example.mockito.MockitoExtension , 看那包名就知道不是来真的,所以决定再等。JUnit 5 不再原生支持 JUnit 4 的 Rule,一切都将是 Extension,那也是要求 Mockito 能够与之俱进。现在等来了,JUnit 5 进化到了 5.2.0, Mockito 也早已有了一个单独的模块 mockito-junit-jupiter 来迎接它。

在 Mockito 2.1.0 的 What's new in Mockito 2 中记述了 JUnit 5 为 Mockito 2 开发了一个 MockitoExtension。追溯到 Mockito 2 的 Release Notes, 我们发现 Mockito 2 官方最早引入 MockitoExtension 的版本是 2.16.3(2018-03023)。我对 Mockito 对 JUnit 5 支持的最新更新是从这个 Pull Request MockitoExtension for JUnit5 得知的。

一句话讲就是现在的 Mockito 2 有原生态的 MockitoExtension 来支援 JUnit 5, 可以非常放心可靠的让 JUnit 5 和 Mockito 2 一起稳定工作。因此前面那个包名带 example 字样的 MockitoExtension 链接也就无效了。

下面来体验一下那个 MockioExtension,测试当中需要的依赖包含 junit-jupiter-engine 和 mockito-junit-jupiter

509c66f7226855f281285b2bd51ea2b6.png

都取了当前在 Maven 中央仓库的最新版本。

在 IntelliJ IDEA 2018.1.3 版本中运行接下来的测试用例,连 jnit-jupiter-engine 都可以不要,看来 IntelliJ IDEA 自带了 jupiter-api 实现。Maven 命令可不行,而且 Maven 还要插件依赖 junit-platform-surefire-provider 才能执行。

首先我们要有一个被测试类 UserService

8cca512f05f24246bf080ddf3f249148.png

 然后创建它的测试用例 UserServiceTest

c94243c40a49312e19b9ccaecc85e6e1.png

JUnit 5 下只能用 @ExtendWith , 找不到 @RunWith 了,虽然 MockitoJUnitRunner 还在,可它是为 JUnit 4 准备的。

在 IntelliJ IDEA 中运行该测试

一切工作正常,方法被 Mock, Mock 对象自动被注入, @DisplayName 也正常显示

若要用 mvn test 在控制台下运行测试用例,还要为 maven-surefire-plugin 加上一个内部依赖,在 pom.xml 文件中

256e9545b7c072a4bca65b2ccad46113.png

然后执行控制台命令

$ mvn test

a58e5d8fcdb0785113f0b018cce90dd8.png

控制台下仍然是不会显示 @DisplayName 指定的描述。

至此为 JUnit 5 与 Mockito 2 工作扫清了一个障碍。可是刚刚偶然间用 Java 10 跑了一下 mvn test 来运行这个例子,出问题了,Java 8, 9 相继被 Oracle 放弃了,离 Java 10 真会越来越远了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值