IllegalStateException 抱怨 PowerMockRule 由 powermock 类加载器而不是系统类加载器加载
IllegalStateException complaining PowerMockRule being loaded by powermock classloader rather than system classloader
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticMethodsHolder.class)
public class MockNTestStaticMethodsHolder {
@Rule public PowerMockRule rule = new PowerMockRule();
@Test public void staticSvcClientMethod () {
// blah blah blah
mockstatic (StaticMethodsHolder.class);
expect (StaticMethodsHolder.TomBradyIsStillTheBest()).andReturn(UNQUESTIONABLY);
expect (StaticMethodsHolder.NEPatriotsStillTheBest()).andReturn(MAYBE);
expect (StaticMethodsHolder.NEPatriotsLiiWereIdiots()).andReturn(TOTALLY);
expect (StaticMethodsHolder.NEPatriotsWinsLiii()).andReturn(RU_KIDDING_ME);
}
}
Maven dependencies/properties 顺序如下:
- powermock-version 1.6.6
- easymock-version 3.4
- easymock
- powermock-module-junit4
- powermock-api-easymock
- powermock-module-junit4-rule-agent
(删除它会导致构造函数问题)
- powermock-module-junit4-规则
(去掉这个依赖没有效果)
- powermock-classloading-xstream
运行时错误:
java.lang.IllegalStateException PowerMockRule can only be used
with the system classloader but was loaded by
org.powermock.core.classloader.MockClassLoader.
PowerMock 在咬自己的尾巴。它想使用自己的类加载器,但 JVM 说 PowerMockRule 必须由系统加载。
我该怎么做才能解决这个问题?
您已经在使用PowermockRunner,不需要使用规则。
https://github.com/powermock/powermock/wiki/powermockrule
如果您在使用不同的运行器同时需要作为规则用例的 Powermock 功能。
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticMethodsHolder.class)
public class MockNTestStaticMethodsHolder {
@Rule public PowerMockRule rule = new PowerMockRule();
@Test public void staticSvcClientMethod () {
// blah blah blah
mockstatic (StaticMethodsHolder.class);
expect (StaticMethodsHolder.TomBradyIsStillTheBest()).andReturn(UNQUESTIONABLY);
expect (StaticMethodsHolder.NEPatriotsStillTheBest()).andReturn(MAYBE);
expect (StaticMethodsHolder.NEPatriotsLiiWereIdiots()).andReturn(TOTALLY);
expect (StaticMethodsHolder.NEPatriotsWinsLiii()).andReturn(RU_KIDDING_ME);
}
}
Maven dependencies/properties 顺序如下:
- powermock-version 1.6.6
- easymock-version 3.4
- easymock
- powermock-module-junit4
- powermock-api-easymock
- powermock-module-junit4-rule-agent (删除它会导致构造函数问题)
- powermock-module-junit4-规则 (去掉这个依赖没有效果)
- powermock-classloading-xstream
运行时错误:
java.lang.IllegalStateException PowerMockRule can only be used
with the system classloader but was loaded by
org.powermock.core.classloader.MockClassLoader.
PowerMock 在咬自己的尾巴。它想使用自己的类加载器,但 JVM 说 PowerMockRule 必须由系统加载。
我该怎么做才能解决这个问题?
您已经在使用PowermockRunner,不需要使用规则。
https://github.com/powermock/powermock/wiki/powermockrule
如果您在使用不同的运行器同时需要作为规则用例的 Powermock 功能。