尝试使用Mockito和PowerMock模拟最终课程我收到了错误:
java.lang.IllegalArgumentException: Cannot subclass final class class MyFinalClass
at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
这发生在一个巨大的项目中,然后为了隔离奇怪的效果我刚刚将MyFinalClass类提取到一个小测试项目中,现在我可以模拟它了。
做一些研究我还发现问题在于将类传递给PowerMock
final MyFinalClass mock = PowerMockito.mock(MyFinalClass.class);
因为在我的巨大项目中进行并获得修饰符,它显示为公共和最终:
MyFinalClass.class.getModifiers() == 17
但是在我的小测试项目中进行它只显示为公开:
MyFinalClass.class.getModifiers() == 1
因为getModifiers()方法是原生的,所以我无法在其中进行调试,看看发生了什么。
有什么线索可以导致这个类修饰符不被PowerMock更改并留下作为最终类?或者我怎样才能发现为什么PowerMock在我的庞大项目中没有按预期工作 ?