2013-04-16 4 views
3

각 데이터에는 info_A와 info_B가 포함 된 일련의 데이터가 있습니다.JUNIT 조건부 테스트가 가능합니까?

if(info_A) { 
    run Test A 
} else if(!info_A) { 
    run Test B 
} 

실제로 실행되는 테스트 만 JUnit GUI 트리에 표시되는 것이 매우 중요합니다. 어떻게해야합니까?

다음 솔루션은 하지 일 :

  • 나는 Assume.assumeTrue(conditon)를 사용하는 경우, 내가 할 수 Ignore 테스트 만이 다음 시험에 통과로 여전히을 표시합니다. 이렇게
  • :
    Result result = JUnitCore.runClasses(TestStep1.class);
    은 올바른 결과에 이르게하지만 JUnit을 나무 내장 하지입니다.
  • @Catagories를 사용하면 이 (가) 테스트에서 실패했음을 보여줍니다. 이는 내가 원하지 않는 것입니다.
+0

[답변] (http://stackoverflow.com/a/1689261/376390)이 귀하의 질문에 대한 해결책이 될 수도 있습니다. – Marco

답변

3

당신은 use Assume 조건에서 테스트를 온/오프 할 수 있습니다

테스트가 의미있는 조건에 대한 가정을 진술에 유용한 방법의 집합입니다. 실패한 가정은 코드가 깨 졌음을 의미하는 것이 아니라 테스트가 유용한 정보를 제공하지 않는다는 것을 의미합니다.

1

JUnit 규칙을 사용하여이를 수행 할 수 있습니다.

가 정확히 질문 here에 전념 전체 블로그 게시물,하지만 짧은에, 당신은 다음을 수행

  1. org.junit.rules.TestRule 인터페이스를 구현하는 클래스를 만듭니다. - 음, apply() 방법은 실제로 그렇게 할 것입니다 Statement 익명의 인스턴스를 반환
    Statement apply(Statement base, Description description);
    base 인수가 실제로 base.execute()를 호출하여 실행 테스트입니다 :이 인터페이스는 다음과 같은 방법이 포함되어 있습니다. 익명의 Statement 인스턴스에서 테스트를 실행할지 여부를 결정하는 논리를 추가합니다. 테스트를 실행하는 것 외에는 아무 것도하지 않는 TestRule 구현의 예는 아래를 참조하십시오. 그렇습니다. 특히 그렇진 않습니다.
  2. 당신이 당신의 TestRule 구현을 만든 후에, 당신은 당신 JUnit 테스트 클래스에 다음 줄을 추가해야합니다
    @Rule
    public MyTestRuleImpl conditionalTests;

    가 기억 필드 필수가 공개.

그리고 그게 전부입니다. 행운을 비네 - 내가 말했듯이, 당신은 조금 해킹해야 할 수도 있습니다,하지만 나는 거기에 공정한 금액은 블로그 게시물에 설명되어 있다고 생각합니다. 그렇지 않으면 인터넷 (또는 JUnit 소스 코드)에 대한 다른 정보가 있어야합니다.

다음은 아무 것도하지 않는 TestRule 구현의 간단한 예입니다.

public abstract class SimpleRule implements TestRule { 
    public Statement apply(final Statement base, final Description description) { 
     return new Statement() { 
      public void evaluate() throws Throwable { 
       try { 
        base.evaluate(); 
       } catch (Throwable t) { 
        t.printStackTrace(); 
       } 
      } 
     }; 
    } 
} 
관련 문제