매우 큰 프로젝트가 있습니다. 개발자가 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
통찰력을 주셔서 감사합니다.
""원인 : java.lang.ClassNotFoundException :' "*이 오류는 IntelliJ의 클래스 경로 관련 구성 문제로 인해 명백합니다. PowerMock의 런타임 종속성이 누락되었을 수 있습니다. –
@TimothyTruckle, maven이 작동하여 동적 클래스 경로가 작동하지 않습니다. 이것은 어리석은 것 중 하나가 아닙니다. "나는 어쨌든 나는 의존성을 잊어 버렸습니다."라고 두려워하는 경우입니다. – Vitaliy
@ Vitaliy : * "이것들은 바보 같은 것이 아닙니다."나는 의존성 "사례"*를 잊어 버렸습니다. 그러나 이것은 스택 추적으로 알려줍니다. IntelliJ 프로젝트를 "Maven 프로젝트로"가져 왔습니까? (IntelliJ가 호출 한 것) IntelliJ 프로젝트를 Maven 구성과 올바르게 동기화 했습니까? * eclipse *에서 부모 프로젝트는 작업 영역으로 가져올 필요가 없습니다. IntelliJ도 똑같이 동작합니까? –