使用Java7构造模拟静态方法时出现PowerMock问题

时间:2016-11-22 14:07:04

标签: mockito java-7 powermock java-6 verifyerror

我遇到了使用 Java7 编译的代码模拟静态测试的问题。

我使用注释

注释我的jUnit测试
  1-  select * from tblperson where name not like '[^AKG]%';

  2-  select * from tblperson where name like '[AKG]%';

运行我的测试并尝试使用

模拟我的静态类
 @RunWith(PowerMockRunner.class)
 @PrepareForTest(StaticClassToMock.class)

它返回

PowerMockito.mockStatic(StaticClassToMock.class);

如果在StaticClassToMock中,我通过替换OR中的catched异常并将它们放入级联中来删除Java7构造,它可以正常工作。

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

使用 Java6 编译PowerMock时,我的问题与 Java7 结构有关吗?

由于

1 个答案:

答案 0 :(得分:1)

这就是PowerMock的事情 - 欢迎它出现奇怪的错误。

第一个问题是 - 您使用的是IBM JDK吗?因为IBM JDK和PowerMock变得更加“奇怪”#34;比Oracle / OpenJDK和PowerMock。

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

  1. VerifyError on WAS
  2. Code not working with Java7
  3. 无论如何,第一个答案是:只需尝试使用 -noverify 运行JVM就可以了。

    答案越长:除非您正在测试您无法改变的第三方代码;考虑......不要以一种让你转向PowerMock的方式使用静态代码。

    你知道,静态首先是良好的OO设计的异常。它应该非常谨慎地使用;因为它会将大量直接耦合到您的代码中。简单地说:使用 static 是创建难以/无法测试的代码的简单方法之一!因此,如果您选择更改代码,则可以首先查看videos以了解如何创建可测试代码。然后你需要转向PowerMock ......就会消失。

    我个人的两分钱:我花了很多时间寻找这样的PowerMock问题。然后我们决定采用不同的设计,只允许静态内容不会破坏我们的普通单元测试。从那时起,我们与EasyMock和Mockito一起生活得很好。不再需要PowerMock;不再需要花费数小时来调试那些没有与我们的生产代码有关的问题;但只有模拟框架。