JUnit 4.11 получить результат теста в @After

Есть ли способ получить результат теста в методе teardown (@After)? Я хочу сделать очистку после тестов в зависимости от результата.

Не удалось найти подробные сведения о @After в документах junit.

Ответ 1

Самое близкое к тому, что вы просите, вероятно, будет TestWatcher. Это не даст вам доступ к возвращенному результату или чему-либо еще, но вы можете использовать его (или создать свой собственный TestRule и в сочетании с Описание объекта, вы можете по-разному аннотировать свои методы, чтобы указать, какая очистка необходима.

Ответ 2

Почему бы не установить результат теста в члене класса и затем действовать на него в методе @After?

public enum TestResult {
    ...
}

public class TestClass {

    private TestResult result;
     ...
    @Test
    public void aTest() {
    // set up test
    // call class under test
    // assert something and set result based upon outcome
    this.result = ...; 
    }
    ...
   @After
    public void teardown() {
     // clean up based upon this.result
    }
}

Я подозреваю, что у вас не будет слишком много разных результатов, и конечного набора будет достаточно.

Ответ 3

Если нет стандартной возможности (я уверен, что в JUnit 3.x не было возможности), вы можете просто

напишите прослушиватель,

перетащите события Listener-static в статическую коллекцию,

и соберите их из @After-Method.

Ответ 4

Да, если вы используете TestNG, это стандартная функция, ваш метод @After может выглядеть следующим образом:

@AfterTest
public void cleanUp( ITestResult result ) {
    boolean success = result.isSuccess();
    ....

Ответ 5

Я использую нечто похожее на JamesB. Вы можете дойти до того, что вам нужно добавить таймауты к тестам, затем = →

", устанавливающий результат теста в члене класса, а затем воздействующий на него в методе @After," не всегда будет работать, если у вас более 1 утверждения. Это моя проблема сегодня, когда у меня есть testCaces, что тайм-аут, но мой afterClass предполагает, что все прошло гладко, потому что последнее утверждение прошло.