使用Java7构造嘲笑静态方法时,PowerMock问题



我正在用 java7 进行编译的静态测试遇到问题。

我正在用注释注释我的junit测试

 @RunWith(PowerMockRunner.class)
 @PrepareForTest(StaticClassToMock.class)

运行测试并尝试用

模拟我的静态课程
PowerMockito.mockStatic(StaticClassToMock.class);

它返回

java.lang.VerifyError: JVMVRFY012 stack shape inconsistent [...]

如果在静态classtomock中我通过将捕获的例外替换或将它们放入级联反应中删除Java7构造。

我看到PoweMock(1.6.6)的最后一个版本是用Java6编译的。

我的问题与 java7 构造是与 java6

构造时的构造

谢谢

这是PowerMock的东西 - 欢迎来到其奇异错误。

第一个问题是 - 您使用IBM JDK吗?因为IBM JDK和PowerMock比Oracle/OpenJDK和PowerMock更"怪异"。

如果您进行了一些搜索,则有很多潜在的提示:

  1. verifyError on w is
  2. 代码不使用Java7

无论如何,第一个答案是:如果使用 -noverify 运行JVM,请尝试任何区别。

答案越长:除非您测试无法更改的第三方代码;考虑...不要以使您转向PowerMock的方式使用 static 代码。

您看到的, static 首先是异常对良好的OO设计。它应该非常谨慎;由于它将很多直接耦合到您的代码中。简单地说:使用 static 是创建难以测试的代码的简单方法之一!因此,如果更改代码是一个选项,则可以观看这些视频,以了解如何创建可测试代码。然后您需要转向PowerMock ...将消失。

我个人的两分钱:我花了很多时间来寻找这样的PowerMock问题。然后,我们决定进行不同的设计,这些设计仅允许 static 内容不会破坏我们的普通单位测试。从那以后,我们与Easymock和Mockito一起生活。不再需要Powermock;无需花费数小时来调试> 与我们的生产代码有关的问题;但是只有模仿框架。

相关内容

  • 没有找到相关文章

最新更新