我遇到了使用 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 结构有关吗?
由于
答案 0 :(得分:1)
这就是PowerMock的事情 - 欢迎它出现奇怪的错误。
第一个问题是 - 您使用的是IBM JDK吗?因为IBM JDK和PowerMock变得更加“奇怪”#34;比Oracle / OpenJDK和PowerMock。
如果你进行一些搜索,有很多潜在的提示:
无论如何,第一个答案是:只需尝试使用 -noverify 运行JVM就可以了。
答案越长:除非您正在测试您无法改变的第三方代码;考虑......不要以一种让你转向PowerMock的方式使用静态代码。
你知道,静态首先是良好的OO设计的异常。它应该非常谨慎地使用;因为它会将大量直接耦合到您的代码中。简单地说:使用 static 是创建难以/无法测试的代码的简单方法之一!因此,如果您选择更改代码,则可以首先查看videos以了解如何创建可测试代码。然后你需要转向PowerMock ......就会消失。
我个人的两分钱:我花了很多时间寻找这样的PowerMock问题。然后我们决定采用不同的设计,只允许静态内容不会破坏我们的普通单元测试。从那时起,我们与EasyMock和Mockito一起生活得很好。不再需要PowerMock;不再需要花费数小时来调试那些没有与我们的生产代码有关的问题;但只有模拟框架。