내 테스트 클래스의 모든 테스트는 각 테스트를 실행하기 전에 '이전'메소드 (JUnit의 @Before
으로 주석 됨)를 실행합니다.JUnit의 'before'메소드에서 개별 테스트 제외
메소드 이전에 이것을 실행하지 않는 특정 테스트가 필요합니다.
할 방법이 있습니까?
내 테스트 클래스의 모든 테스트는 각 테스트를 실행하기 전에 '이전'메소드 (JUnit의 @Before
으로 주석 됨)를 실행합니다.JUnit의 'before'메소드에서 개별 테스트 제외
메소드 이전에 이것을 실행하지 않는 특정 테스트가 필요합니다.
할 방법이 있습니까?
불행히도이 논리를 코드화해야합니다. JUnit에는 이러한 기능이 없습니다. 실행 "전에"필요 테스트를 포함하는 하나와 두 번째 그이 필요하지 않은 검사를 포함
@RequiresBefore
을 만들고이 주석과 함께 필요한 테스트를 표시하십시오. 테스트 러너는 주석을 구문 분석하고 "이전"메소드 실행 여부를 결정합니다.두 번째 해결 방법이 더 명확합니다. 첫 번째는 더 간단합니다. 이 중 하나를 선택하는 것은 귀하에게 달려 있습니다.
@Enclosed
러너를 사용하여 두 개의 내부 테스트 클래스를 가질 수 있습니다. 하나는 필요한 @Before
방법으로, 다른 하나는 필요하지 않습니다.
@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(){}
}
}
당신은 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();
}
};
}
테스트 케이스 내에 @Before
설정에서 수행 된 작업을 취소하여이 문제를 해결할 수도 있습니다. 이
@Before
public void setup() {
TestDataSetupClass.setupTestData();
}
@Test
public void testServiceWithIgnoreCommonSetup() {
TestDataSetupClass.unSet();
//Perform Test
}
여기 솔루션에 대한 장단점이있을 것, 그것은 보일 수 있습니다 방법이다. 부차적 인 단점은 불필요한 사이클의 설정 및 해제 단계입니다. 하지만 수백 가지 중 하나의 테스트 케이스만으로 테스트를 수행하고 자체 AOP를 작성하거나 여러 개의 내부 테스트 클래스를 유지하는 오버 헤드를 피하려면 잘 진행됩니다.
다음은 업데이트 된 링크입니다. https://github.com/junit-team/junit/wiki/Rules. 참고 : http://junit.org/apidocs/org/junit/rules/TestRule.html – Bowen
TestRule에서 @Before 문을 쉽게 실행할 수 있습니까? 나는 가장 간단한 접근 방법이 무엇인지 궁금하네요. – loeschg