2012-10-22 4 views

답변

9

불행히도이 논리를 코드화해야합니다. JUnit에는 이러한 기능이 없습니다. 실행 "전에"필요 테스트를 포함하는 하나와 두 번째 그이 필요하지 않은 검사를 포함

  1. 그냥 별도의 테스트 케이스 2 테스트 케이스 : 일반적으로 당신은이 개 솔루션을 가지고있다.
  2. 테스트를 실행하고 테스트에 주석을 달아 사용하십시오. 자신의 주석 @RequiresBefore을 만들고이 주석과 함께 필요한 테스트를 표시하십시오. 테스트 러너는 주석을 구문 분석하고 "이전"메소드 실행 여부를 결정합니다.

두 번째 해결 방법이 더 명확합니다. 첫 번째는 더 간단합니다. 이 중 하나를 선택하는 것은 귀하에게 달려 있습니다.

15

@Enclosed 러너를 사용하여 두 개의 내부 테스트 클래스를 가질 수 있습니다. 하나는 필요한 @Before 방법으로, 다른 하나는 필요하지 않습니다.

Enclosed

@RunWith(Enclosed.class) 
public class Outter{ 

    public static class Inner1{ 

    @Before public void setup(){} 

    @Test public void test1(){} 
    } 

    public static class Inner2{ 

    // include or not the setup 
    @Before public void setup2(){} 

    @Test public void test2(){} 
    } 

} 
19

당신은 TestRule이 작업을 수행 할 수 있습니다. 당신은 TestRule의 적용 방법, 당신은 몇 가지 설명을 주석으로 이전을 건너 뛸 검사를 표시하고, 그 주석을 테스트 할 수 있습니다, 당신이 원하는과 같이 수행

public Statement apply(final Statement base, final Description description) { 
    return new Statement() { 
    @Override 
    public void evaluate() throws Throwable { 
     if (description.getAnnotation(DontRunBefore.class) == null) { 
     // run the before method here 
     } 

     base.evaluate(); 
    } 
    }; 
} 
+0

다음은 업데이트 된 링크입니다. https://github.com/junit-team/junit/wiki/Rules. 참고 : http://junit.org/apidocs/org/junit/rules/TestRule.html – Bowen

+4

TestRule에서 @Before 문을 쉽게 실행할 수 있습니까? 나는 가장 간단한 접근 방법이 무엇인지 궁금하네요. – loeschg

0

테스트 케이스 내에 @Before 설정에서 수행 된 작업을 취소하여이 문제를 해결할 수도 있습니다. 이

@Before 
public void setup() { 
    TestDataSetupClass.setupTestData(); 
} 

@Test 
public void testServiceWithIgnoreCommonSetup() { 
    TestDataSetupClass.unSet(); 
    //Perform Test 
} 

여기 솔루션에 대한 장단점이있을 것, 그것은 보일 수 있습니다 방법이다. 부차적 인 단점은 불필요한 사이클의 설정 및 해제 단계입니다. 하지만 수백 가지 중 하나의 테스트 케이스만으로 테스트를 수행하고 자체 AOP를 작성하거나 여러 개의 내부 테스트 클래스를 유지하는 오버 헤드를 피하려면 잘 진행됩니다.

관련 문제