我最近在单元测试中遇到了设置问题。我使用JUnit
进行了EasyMock
测试,以实现开发人员除了使用静态方法模拟类外,还需要开发人员进行的所有奇妙模拟。输入PowerMockRunner
。效果很好,但是我有一个实例,其中特定的类同时具有静态和非静态方法,我以相同的方式设置了此类:
@RunWith(PowerMockRunner.class)
@PrepareForTest({MyStaticClass.class})
...
mockStatic(MyStaticClass.class);
expect(MyStaticClass.getStuff()).andReturn(stuff).times(2);
replayAll();
我尝试进行构建(使用测试)并出现以下错误:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.455 sec <<< FAILURE! - in com.digital.controller.TestController
initializationError(com.digital.controller.TestController) Time elapsed: 0.007 sec <<< ERROR!
java.lang.IllegalStateException: Failed to transform class with name com.digital.web.processor.MyStaticClass. Reason: javassist.bytecode.InterfaceMethodrefInfo cannot be cast to javassist.bytecode.MethodrefInfo
我已经在Google上搜索并找到了解决方案,这是将javassist
升级到PowerMock
使用的相同版本(3.21.0-GA)。这可行,但是我正在探索可能不会升级javassist
的选项。原因是此应用程序是使用3.17.1-GA的现有Web应用程序的扩展。如果没有,那么将扩展的Web应用程序从3.17.1-GA升级到3.21.0-GA有什么意义?