수색…


비고

어느 쪽이든 이익이 있습니다. ExternalResource 확장하는 것이 편리합니다. 특히 뭔가를 설정 before() 위해 before() 만 필요한 경우에 특히 편리합니다.

그러나 before() 메소드가 try...finally 외부에서 실행 before() 때문에 try...finally after() 에서 오류가 발생하면 after() 에서 정리 작업을 수행해야하는 모든 코드가 실행되지 않습니다. before() 실행.

ExternalResource 내부를 보는 방법입니다.

before();
try {
    base.evaluate();
} finally {
    after();
}

테스트 자체 나 다른 중첩 된 규칙에 의해 예외가 던져지면 분명히 애프터 콜이 실행됩니다.

구현에 의한 @TestRule 사용자 정의

이는 규칙에서 확장하려는 클래스가있는 경우 특히 유용합니다. 더 편리한 방법은 아래 예제를 참조하십시오.

import org.junit.rules.TestRule;
import org.junit.runners.model.Statement;

public class AwesomeTestRule implements TextRule {
    
    @Override
    public Statement apply(Statement base, Description description) {
        return new AwesomeStatement(base);
    }

    private static class AwesomeStatement extends Statement {
        
        private Statement base;
        
        public AwesomeStatement(Statement base) {
            this.base = base;
        }

        @Override
        public void evaluate() throws Throwable {
            try {
                // do your magic
                base.evaluate(); // this will call Junit to run an individual test
            } finally {
                // undo the magic, if required
            }
        }
    }
    
}

확장 기능 별 @TestRule 사용자 정의

JUnit은 더 간단한 방법으로 규칙을 작성할 수있게 해주는 @TestRule 의 추상 구현을 @TestRule 합니다. 이것은 ExternalResource 라고하며 다음과 같이 확장 할 수있는 두 가지 보호 된 메소드를 제공합니다.

public class AwesomeTestRule extends ExternalResource {

    @Override
    protected void before() {
        // do your magic
    }

    @Override
    protected void after() {
        // undo your magic, if needed
    }

}



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow