我想由PowerMockrunnner替换我的Junitrunner(为了进一步使用Simple Mockito没有的PowerMock的功能(。
因此,我添加了依赖项,在测试类中取代了跑步者,并添加了@preparefortest注释,并且在编写任何进一步的测试代码之前,请运行我的现有测试以验证它们。
〜25测试,5或6的失败出于功能明显的原因(我的意思是它们在运行代码中的实际失败中失败,而不是在某些基础设施错误上(。
在正常状态下,这些测试是100%一致且非粉状的。
这样的变化如何失败完全工作测试?
为了帮助您诊断问题,您必须发布一些失败的测试。
,但老实说;你在这里走错了兔子洞!
PowerMock(ITO(对Mockito提供的仅有的两个功能是:它可以模拟静态呼叫和呼叫new((。
您为这些功能支付的奖品:
- Mockito的Backlevel版本被迫在您身上。Mockito本身目前为2.8版;但是PowerMockito并没有比Mockito 2.0.40 Beta的新事物(而且Mockito Team几乎每周发布 基础!(
- PowerMock依赖于字节码操纵。含义:模拟静态调用会更改您的生产代码。是的,所有这些都可以。但是,只要看看这里的所有问题都标记为PowerMock-您可能会注意到模式。关于晦涩的问题有很多问题,大多数人经常没有解决。一旦您开始使用其他JVM,就可以保证" Fun"。(相信我,去过那里!(
- PowerMock与需要字节代码操纵的其他框架(例如用于覆盖范围测量的Eclemma(都不错。
除此之外:您的需要使用PowerMock并非蓝色。这是基于您创建难以测试的代码的事实。
因此,我的建议是:学习如何编写易于测试的代码(例如,观看这些视频(。那里的核心方面:易于测试的代码也很可能是更好的设计的。静态导致紧密的耦合,并破坏了多态性,oo的本质。
所以,我的建议:升级到最新版本的Mockito;与其花时间学习一个框架a(过去造成了很多痛苦b(鼓励您不要修复破碎的设计,而是围绕它们进行工作。
2美分的个人经验:我们的团队在开始单元测试时使用了PowerMock。我们花了无数小时来查看其中一些奇异的PowerMock问题。最后:我们学会了如何编写更好的生产代码;我们学会了如何使用Mockito正确测试它们。我们不再使用PowerMock;我们从来没有对此决定感到遗憾。
尽管这是一个旧文章,但我最近有类似的经历,并遇到了PowerMock和Mockito之间的依赖矩阵。
当我们在Springboot项目中同时使用Mockito和PowerMock依赖项时,我们需要对我们正在使用的PowerMock和Mockito的版本保持谨慎。
这是相同的依赖关系矩阵。
通常,弹簧启动器测试带有Mockito版本。就我而言,我不得不将Mockito依赖性排除在开始器之外,并添加与最新的PowerMock版本配合使用的Mockito版本。如果这对任何人有帮助。