2016-12-26 11 views
0

私は非常に大規模なプロジェクトを行っていますが、ある時点で、開発者はIntellijでPowerMock駆動テストを実行/デバッグしようとすると、次のエラー:Powermock駆動テストはmaven経由でうまく動作しますが、intellijで動作しません

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 

我々はpowermockagentを使用しており、ユニットテストは、通常、次のようになります。私は dynamic.pathを無効場合、興味深いことに

@PrepareForTest({Bla.class}) 
public class BlaTest { 

    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    static { 
     PowerMockAgent.initializeIfNeeded(); 
    } 

    @Test public void test() { ... } 
} 

は、問題が離れたが、私行きますそれを回避策と考える他のシナリオではdynamic.pathが必要なので解決策はありません。

Powermockバージョン:1.6.3 | Junitバージョン:4.11 | Intellijバージョン:2016.3

洞察力はありがたいです。

+0

""原因:java.lang.ClassNotFoundException: '" *このエラーは、クラスパスに関するIntelliJの設定上の問題により明らかです。 PowerMockのランタイム依存性が失われている可能性があります。 –

+0

@TimothyTruckle、mavenで動作し、動的クラスパスを無効にします。これは愚かなものの一つではありません。私は恐れています。 – Vitaliy

+0

@ Vitaliy:* "これは愚かなことの一つではありません"私は依存関係の "事例"を忘れてしまいました*しかし、これはstacktraceが教えてくれるものです。 IntelliJプロジェクトを "mavenプロジェクトとして"インポートしましたか(IntelliJがこれまで呼んでいたこと)、IntelliJプロジェクトをMaven構成と正しく同期させましたか? * eclipse *では、親プロジェクトをワークスペースにインポートする必要はありませんが、IntelliJは同じように動作しますか? –

答えて

0

解決済みthis is a known issue 回避策は、IDEA_CONFIG/options/options.xmlのプロパティidea.dynamic.classpath.jarをtrueに設定することでした。

another know issueのため、最初はfalseに設定されています。

これはかなり面倒ですが、これは今のところ最高です(2017年3月)。

関連する問題