2016-12-26 3 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 : * "이것들은 바보 같은 것이 아닙니다."나는 의존성 "사례"*를 잊어 버렸습니다. 그러나 이것은 스택 추적으로 알려줍니다. 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 월) 지금까지 최고입니다.

관련 문제