Spring test listener: как узнать, не удался ли мой тест?

#java #spring #testng #spring-test

#java #spring #testng #spring-test

Вопрос:

У меня есть несколько очень сложных интеграционных тестов, написанных с использованием Spring Test framework. Что я хотел бы сделать, так это извлечь последние n строк из файла журнала сервера на случай, если тест не удался.

Для этих целей я создал test:

 @TestExecutionListeners({LogFetchingTestListener.class})  
public MyComplexTestClass extends AbstractTestNGSpringContextTests {
    @Test
    public void myComplexTest() {
        // Here goes the test logic...
    }
}
  

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

 public class LogFetchingTestListener extends ABstractTestExecutionListener {
    @Override
    public void afterTestExecution(TestContext context) {
        // Use some spring beans to get entities to connect to servers
    }
}
  

Все в порядке, но я не смог найти свойства в TestContext или где-то еще, которые позволят мне узнать, не удался ли мой тест или нет.

Это довольно важно, поскольку у меня есть большое количество тестов, и совершенно бессмысленно извлекать журналы для тестовых случаев, которые были успешно запущены.

Предоставляет ли Spring эту информацию в прослушивателях тестов? Если нет, есть ли какие-либо обходные пути для этого?

Спасибо.

Ответ №1:

Я бы рекомендовал переопределить afterTestMethod(TestContext) вместо afterTestExecution(TestContext) , поскольку первое будет выполнено после @AfterMethod методов жизненного цикла в тестовом классе.

Чтобы получить исключение (т. Е. причину неудачного теста), вам просто нужно получить доступ testContext.getTestException() .

Комментарии:

1. Сэм, спасибо, что указал метод, который я должен переопределить! Я правильно понимаю, что тест всегда не равен null для неудачных тестовых случаев? Возможно ли, что в успешном тестовом примере это поле также будет заполнено, например, когда я ожидаю это исключение и подтверждаю, что оно было выдано?

2. Я думаю, это зависит от используемой вами платформы тестирования и от того, как / где вы «ожидаете это исключение и подтверждаете, что оно было выдано».