我正在用 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更"怪异"。
如果您进行了一些搜索,则有很多潜在的提示:
- verifyError on w is
- 代码不使用Java7
无论如何,第一个答案是:如果使用 -noverify 运行JVM,请尝试任何区别。
答案越长:除非您测试无法更改的第三方代码;考虑...不要以使您转向PowerMock的方式使用 static 代码。
您看到的, static 首先是异常对良好的OO设计。它应该非常谨慎;由于它将很多直接耦合到您的代码中。简单地说:使用 static 是创建难以测试的代码的简单方法之一!因此,如果更改代码是一个选项,则可以观看这些视频,以了解如何创建可测试代码。然后您需要转向PowerMock ...将消失。
我个人的两分钱:我花了很多时间来寻找这样的PowerMock问题。然后,我们决定进行不同的设计,这些设计仅允许 static 内容不会破坏我们的普通单位测试。从那以后,我们与Easymock和Mockito一起生活。不再需要Powermock;无需花费数小时来调试> 与我们的生产代码有关的问题;但是只有模仿框架。