2012-08-15 3 views
0

내가 JUnitCore.runClasses()를 사용하는 것을 시도하고있다 JUnitCore.runClasses()에 java.io.File의를 통과하고 난 다음 코드와이 가능

JUnitCore.runClasses(testClass.class); 

를 사용하여 실행 얻을 수 있습니다하지만 난 궁금했다 runClasses()는 여러 매개 변수를 사용할 수 있으므로 다음과 비슷한 코드를 사용할 수 있습니까?

Class c = testClass.class; 
JUnitCore.runClasses(c); 

또는

List<Class> c = new ArrayList<>{test1.class, test2.class, test3.class}; 
JUnitCore.runClasses(c); 

당신이 JUnitCore.runClasses에 java.io.File의 유형() 다음과 같은 오류를 얻을를 통과하려고하면 나는이 요청하고

no suitable method found for runClasses(java.io.File) 
method org.junit.runner.JUnitCore.runClasses(java.lang.Class<?>...) is not applicable 
    (argument type java.io.File does not conform to vararg element type java.lang.Class<?>) 
method org.junit.runner.JUnitCore.runClasses(org.junit.runner.Computer,java.lang.Class<?>...) is not applicable 
    (actual argument java.io.File cannot be converted to org.junit.runner.Computer by method invocation conversion) 
+0

로의 TestClass의 목록을 포함? 달성하려는 목표는 무엇입니까? – hertzsprung

+0

나는 정말로 내 머리 꼭대기에서 코딩을하고있다. 나는 .class 파일이되도록 파일을 설정할 수 있다고 가정했다. 그렇지 않습니까? – flexinIT

+0

아니요, java.lang.Class는 java.io.File에 할당 할 수 없습니다. – hertzsprung

답변

2

다음을 수행하려고한다고 가정합니다.

JUnitC를 사용하여 실행하려는 Java 클래스가 포함 된 파일이 있습니다 광석.

  1. 로드 클래스,이 사용자 정의 클래스 로더를 사용하여 수행 할 수 있습니다 :

    당신이해야 할이 acomplish합니다. 보다 나은 접근법은 클래스를 애플리케이션에 포함시키는 것입니다.
  2. 이제 JUnitCore.runClasses (loadedClass)를 호출 할 수 있습니다.

코드 샘플 : 클래스가 패키지가없는 경우

File file = new File("path to your file"); 
File dir = file.getParentFile(); 
URL url = new URL("file://" + dir.getAbsolutePath()); 
URLClassLoader classLoader = new URLClassLoader(new URL[]{url}); 
Class<?> clazz = classLoader.findClass("ClassName"); 
JUnitCore.runClasses(clazz); 

이 예에만 작동합니다. 클래스 로딩 프로세스를 제어하는 ​​자체 클래스 로더를 작성할 수 있습니다. 이 클래스 로더가 어떻게 작동하는지 알아 보려면 javadoc for URLClassLoader을 참조하십시오. 커스텀 클래스 로더를 작성하려면 this을 참조하십시오.

+0

네, 그게 정확히 제가하려고하는 일입니다 ... 나는이 일을 그렇게 줄 것입니다. – flexinIT

0

모든 TestClass가 포함 된 TestSuite 클래스를 만들 수도 있습니다. 그리고 당신이

JunitCore.runClasses(TestSuite.class); 

있는 TestSuite 클래스를 호출 할 수 있습니다 어떻게 유형 파일의 변수에 클래스 인스턴스를 할당 할 수 있습니다 같은

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
    Test1.class, 
    Test2.class 
}) 
관련 문제