2014-11-06 1 views
7

일부 테스트의 구성을 개선하고 개선하기 위해 JUnit Enclosed 러너를 실험하고 있습니다. 현재 내부 클래스간에 설정을 공유하는 방법을 알아 내려고 노력 중입니다.JUnit 동봉 된 러너 및 공유 설정

시도 첫 번째 :

@RunWith(Enclosed.class) 
public class EnclosedTest { 

    @Before 
    public void printSomething() { 
     System.out.println("Helllooo Meggan"); 
    } 

    public static class FirstTest { 

     @Test 
     public void assertThatSomethingIsTrue() { 
      assertThat(true, is(true)); 
     } 
    } 

    public static class SecondTest { 

     @Test 
     public void assertThatSomethingIsFalse() { 
      assertThat(false, is(false)); 
     } 
    } 
} 

불행하게도 아무도 Meggan에게 인사 말한다. 나는 바깥을 확장하는 내부 클래스를 업데이트하면, 내가 얻을 다음

java.lang.Exception: class 'org.scratch.EnclosedTest$FirstTest' (possibly indirectly) contains itself as a SuiteClass 
at org.junit.runners.model.InitializationError.<init>(InitializationError.java:32) 

내부 테스트 클래스 사이의 설정을 공유 할 때 사용하는 특정 Enclosed 관용구가 있는가? C# example I found처럼 간단 할 것으로 기대하고있었습니다.

답변

12

Enclosed 러너는 내부적으로 Suite으로 작동합니다. 즉, 테스트 사례로 클래스를 실행합니다. Junit 4.12부터 추상적 인 내부 클래스는 동봉 된 러너에 의해 무시됩니다. 당신도 각 서브 클래스에 대한 사용자 지정 주자를 선언 할 수

@RunWith(Enclosed.class) 
public class EnclosedTest { 

    abstract public static class SharedSetUp { 
    @Before 
    public void printSomething() { 
     System.out.println("Helllooo Meggan"); 
    } 
    } 

    public static class FirstTest extends SharedSetUp { 
    @Test 
    public void assertThatSomethingIsTrue() { 
     assertThat(true, is(true)); 
    } 
    } 

    public static class SecondTest extends SharedSetUp { 
    @Test 
    public void assertThatSomethingIsFalse() { 
     assertThat(false, is(false)); 
    } 
    } 
} 

주의 : 방법은 설정 공유에 말했다

를 포함하는 추상 클래스 (@Before, @After)를 만드는 것입니다.

관련 문제