Есть ли способ получить результат теста в методе teardown (@After
)? Я хочу сделать очистку после тестов в зависимости от результата.
Не удалось найти подробные сведения о @After
в документах junit.
Есть ли способ получить результат теста в методе teardown (@After
)? Я хочу сделать очистку после тестов в зависимости от результата.
Не удалось найти подробные сведения о @After
в документах junit.
Самое близкое к тому, что вы просите, вероятно, будет TestWatcher. Это не даст вам доступ к возвращенному результату или чему-либо еще, но вы можете использовать его (или создать свой собственный TestRule и в сочетании с Описание объекта, вы можете по-разному аннотировать свои методы, чтобы указать, какая очистка необходима.
Почему бы не установить результат теста в члене класса и затем действовать на него в методе @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
}
}
Я подозреваю, что у вас не будет слишком много разных результатов, и конечного набора будет достаточно.
Если нет стандартной возможности (я уверен, что в JUnit 3.x не было возможности), вы можете просто
напишите прослушиватель,
перетащите события Listener-static в статическую коллекцию,
и соберите их из @After-Method.
Да, если вы используете TestNG, это стандартная функция, ваш метод @After может выглядеть следующим образом:
@AfterTest
public void cleanUp( ITestResult result ) {
boolean success = result.isSuccess();
....
Я использую нечто похожее на JamesB. Вы можете дойти до того, что вам нужно добавить таймауты к тестам, затем = →
", устанавливающий результат теста в члене класса, а затем воздействующий на него в методе @After," не всегда будет работать, если у вас более 1 утверждения. Это моя проблема сегодня, когда у меня есть testCaces, что тайм-аут, но мой afterClass предполагает, что все прошло гладко, потому что последнее утверждение прошло.