동적으로 외부 클래스 '테스트를 실행하는 메소드를 작성하려고합니다. JDK 라이브러리 만 사용하는 테스트를 실행할 수 있지만 org.jmock.Mockery와 같은 다른 라이브러리를 사용하는 테스트를 실행하면 JUnitCore.run (args)에 의해 반환 된 Result 객체에 다음 오류가 발생합니다.JUnitCore가 테스트 케이스에 필요한 라이브러리를로드하지 않았습니다.
[initializationError(package.TestClass): org/jmock/Mockery]
java.lang.NoClassDefFoundError: org/jmock/Mockery
com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
물론 이클립스에서 원래 프로젝트에서 테스트를 실행하면 통과 할 수 있습니다.
ClassLoader는 테스트중인 클래스를로드하고 외부 프로젝트의 클래스 경로에 정의 된 종속성 (예 : jars)을로드하지 않기 때문에이 문제는 클래스 경로와 관련이 있다고 생각합니다. 실행중인 응용 프로그램에 jar를 동적으로로드하는 방법을 모르겠습니다.
다음은 클래스를로드하고 테스트를 실행하는 코드입니다. 사전에
URL url = new File("E:\eclipseProjectName\bin\").toURL();
final URL[] urls = new URL[] { url };
final ClassLoader cl = new URLClassLoader(urls);
@SuppressWarnings("rawtypes")
final Class cls = cl.loadClass("package.ClassName");
final JUnitCore core = new JUnitCore();
final Result result = new JUnitCore().run(Request.method(cls, "methodName"));
감사합니다,
마크 CACHIA
테스트를 어떻게 실행합니까? 이클립스, 개미, 다른 거? 테스트 러너 내에서 클래스 패스를 어떻게 설정하고 있습니까? – unholysampler
위의 코드를 사용하여 프로그래밍 방식으로 테스트가 실행됩니다. 실행을 시작한 후에 classpath에 jar를 동적으로 추가하는 방법을 모르겠다. 이것이 문제라고 생각한다. 나는 많은 연구를 해왔고 이렇게하는 것이 불가능한 것처럼 보였지만 IDE는 외부 테스트를 실행했다. – cachiama
어떻게 외부 항아리를로드 할 수 있습니까? – oers