Ich habe ein sehr großes Projekt, in dem Entwickler irgendwann bemerkten, dass sie beim Versuch, einen PowerMock-gesteuerten Test in Intellij auszuführen, den folgenden Fehler erhalten:
java.lang.NoClassDefFoundError: org/powermock/core/transformers/impl/MainMockTransformer
FATAL ERROR in native method: processing of -javaagent failed
at org.powermock.modules.agent.PowerMockClassTransformer.<clinit>(PowerMockClassTransformer.java:41)
at org.powermock.modules.agent.PowerMockAgent.<clinit>(PowerMockAgent.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.ClassNotFoundException: org.powermock.core.transformers.impl.MainMockTransformer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 8 more
Wir verwenden den Powermockagent und ein Unit-Test sieht normalerweise so aus:
@PrepareForTest({Bla.class})
public class BlaTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
static {
PowerMockAgent.initializeIfNeeded();
}
@Test public void test() { ... }
}
Interessanterweise verschwindet das Problem , wenn ich dynamic.path deaktiviere , aber ich betrachte es als Problemumgehung und nicht als Lösung, da ich den dynamic.path in anderen Szenarien benötige.
Powermock-Version: 1.6.3 | Junit-Version: 4.11 | Intellij-Version: 2016.3
Ich werde mich über Erkenntnisse freuen.
Es stellte sich heraus, dass dies ein bekanntes Problem ist. Die Problemumgehung bestand darin, die Eigenschaft idea.dynamic.classpath.jar in IDEA_CONFIG / options / options.xml auf true zu setzen.
Beachten Sie, dass es aufgrund eines anderen bekannten Problems zunächst auf false gesetzt wurde .
Das ist ziemlich umständlich, aber das Beste, was es derzeit gibt (März 2017).
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen