첫 번째 문제점은 Test3이 @RunWith(Suite.class)
을 사용하지만 @Suite.SuiteClasses({Test3.class, .....})
을 포함하지 않는다는 것입니다. 그러면 IntializationError: class 'Test3' must have a SuiteClasses annotation
가 생성됩니다. Test3 아래에 어떤 클래스도 존재하지 않으므로이 주석을 제거해야합니다.
Exception: No runnable methods
의 두 번째 문제점은 거의 항상 @Test
을 추가하는 것을 잊어서 발생합니다. 샘플에 테스트를 넣지 않았으므로 사실인지 아닌지는 모르겠지만 가능성이 가장 높습니다.
Test1.java
import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test2.class})
public class Test1 {
}
Test2.java
import org.junit.runner.*;
import org.junit.runners.*;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({Test3.class})
public class Test2 {
}
을 :
다음 테스트는 모든 클래스에서 실행 할 수 있습니다 코드의 작업 버전입니다
Test3.java
import static org.junit.Assert.*;
import org.junit.*;
public class Test3 {
@Test
public void testTrue(){
assertTrue(true);
}
}
물건을 구성하는 것보다 더 좋은 방법이 있는지 여부는 클래스를 만드는 방법에 따라 달라집니다. 스위트에 스위트를 추가 할 수 있기 때문에 이것이 보여주는 것처럼 나무 같은 모든 것에 의존하는 스위트 룸을 더 작게 만들 수 있습니다. 예를 들어 내가 일반적으로하는 일은 다음과 같습니다.
AllTestSuite
TextParsingSuite
GuiSuite
SwingSuite
JavaFXSuite
FileIOSuite
테스트는 가장 관련있는 제품군에 추가됩니다. 결국 나는 10 개 이상의 테스트 클래스/스위트를 가진 스위트가 없다고 생각합니다. 그렇게한다면 새로운 하위 제품군을 만들 차례입니다. 다른 말로하면 "거대한리스트 어딘가"가 존재하지 않고 하나의 큰리스트를 효과적으로 만들기 위해 더 작은리스트가 다른리스트로 결합되어 있습니다.
일부 도구를 사용하여 테스트가 포함 된 모든 Java 클래스를 동적으로 찾을 수 있지만 JUnit 자체는이 동작을 지원하지 않습니다 (개인적으로 좋은 것으로 생각되는 테스트 만 실행합니다).).
모든 Test3에서 @RunWith (Suite.class)를 제거하고 누락 된 주석을 추가하여 Test2s 중 하나가 모든 문제를 해결했습니다. 그러나 이것은 ike가 그것을하는 제일 방법 인 것처럼 보이지 않는다. 특정 디렉토리에서 모든 테스트를 실행하는 더 좋은 방법이 있습니까? – Spyder