Junit Powermock测试失败

Junit Powermock测试失败,junit,mockito,powermock,Junit,Mockito,Powermock,我想用Powermockrunnner替换我的JUnitRunner(以便进一步使用Powermock的功能,而这是simple Mockito所没有的) 因此,我添加了依赖项,替换了测试类中的运行程序,添加了@PrepareForTest注释,并且在编写任何进一步的测试代码之前,运行了现有的测试来验证它们 在大约25个测试中,有5个或6个由于明显的功能原因而失败(我的意思是,它们在运行代码中的实际故障上失败,而不是在一些基础结构错误上) 在正常状态下,这些测试是100%一致和非片状的 这样的更

我想用Powermockrunnner替换我的JUnitRunner(以便进一步使用Powermock的功能,而这是simple Mockito所没有的)

因此,我添加了依赖项,替换了测试类中的运行程序,添加了@PrepareForTest注释,并且在编写任何进一步的测试代码之前,运行了现有的测试来验证它们

在大约25个测试中,有5个或6个由于明显的功能原因而失败(我的意思是,它们在运行代码中的实际故障上失败,而不是在一些基础结构错误上)

在正常状态下,这些测试是100%一致和非片状的


这样的更改怎么会使工作测试完全失败?

为了帮助您诊断问题,您必须发布一些失败的测试

但老实说;你进错兔子洞了

PowerMock(ito)在Mockito上提供的仅有两个特性是:它可以模拟静态调用和对new()的调用

您为这些功能支付的奖金:

  • Mockito的后台版本是强制的。Mockito本身现在是2.8版本;但是PowerMockito不能使用比Mockito 2.0.40测试版更新的东西(Mockito团队几乎每周都发布一次!)
  • PowerMock依赖于字节码操作。意思是:模拟静态调用会更改生产代码。是的,所有这些都有效。但是只要看看这里标记的所有PowerMock,您可能会注意到一种模式。有相当多的关于模糊问题的问题,往往得不到解答。一旦您开始使用Oracle以外的其他JVM。。。“乐趣”是有保证的。(相信我,我去过那里!)
  • PowerMock与其他需要字节码操作的框架(例如用于覆盖率测量的EcLemma)并不匹配
除此之外:您对使用PowerMock的需求并不是突然产生的。这是基于您创建了难以测试的代码这一事实

因此,我的建议是:学习如何编写易于测试的代码(例如通过观看这些代码)。核心方面:易于测试的代码很可能设计得更好静态导致紧密耦合,打破了面向对象的本质多态性

因此,我的建议是:升级到Mockito的最新版本;与其花时间去了解一个框架,a)在过去造成了很多痛苦B)鼓励您不要修复损坏的设计,而是围绕它们工作


2%的个人经验:当我们开始单元测试时,我们的团队正在使用PowerMock。我们花了无数个小时研究这些奇怪的PowerMock问题。最后:我们学习了如何编写更好的生产代码;我们学会了如何用Mockito正确地测试它们。我们不再使用PowerMock;我们从未对这一决定感到遗憾

为了帮助您诊断问题,您必须发布一些失败的测试

但老实说;你进错兔子洞了

PowerMock(ito)在Mockito上提供的仅有两个特性是:它可以模拟静态调用和对new()的调用

您为这些功能支付的奖金:

  • Mockito的后台版本是强制的。Mockito本身现在是2.8版本;但是PowerMockito不能使用比Mockito 2.0.40测试版更新的东西(Mockito团队几乎每周都发布一次!)
  • PowerMock依赖于字节码操作。意思是:模拟静态调用会更改生产代码。是的,所有这些都有效。但是只要看看这里标记的所有PowerMock,您可能会注意到一种模式。有相当多的关于模糊问题的问题,往往得不到解答。一旦您开始使用Oracle以外的其他JVM。。。“乐趣”是有保证的。(相信我,我去过那里!)
  • PowerMock与其他需要字节码操作的框架(例如用于覆盖率测量的EcLemma)并不匹配
除此之外:您对使用PowerMock的需求并不是突然产生的。这是基于您创建了难以测试的代码这一事实

因此,我的建议是:学习如何编写易于测试的代码(例如通过观看这些代码)。核心方面:易于测试的代码很可能设计得更好静态导致紧密耦合,打破了面向对象的本质多态性

因此,我的建议是:升级到Mockito的最新版本;与其花时间去了解一个框架,a)在过去造成了很多痛苦B)鼓励您不要修复损坏的设计,而是围绕它们工作


2%的个人经验:当我们开始单元测试时,我们的团队正在使用PowerMock。我们花了无数个小时研究这些奇怪的PowerMock问题。最后:我们学习了如何编写更好的生产代码;我们学会了如何用Mockito正确地测试它们。我们不再使用PowerMock;我们从未对这一决定感到遗憾

虽然这是一篇老文章,但我最近也有类似的经历,遇到了PowerMock和Mockito之间的依赖关系矩阵

当我们在Springboot项目中同时使用Mockito和PowerMock依赖项时,我们需要谨慎使用PowerMock和Mockito的版本

这是同样的理由


通常,SpringBootStarter测试附带Mockito版本。在我的例子中,我必须从starter中排除Mockito依赖项,并添加与最新PowerMock版本配合良好的Mockito版本。如果这对任何人都有帮助,我会很高兴。

虽然这是一篇老文章,但我最近也有过类似的经历,并且遇到了PowerMock和Mockito之间的依赖关系矩阵

当我们在Springboot项目中同时使用Mockito和PowerMock依赖项时,我们需要谨慎使用PowerMock和Mockito的版本

这是