Как запустить метод после каждого теста NUnit (даже сбой в разборке)
Я работаю над библиотекой тестов с помощью NUnit и создаю собственный отчет во время выполнения тестов.
в TearDown
из моих тестов я вызываю метод, который сообщит о результате теста. Он отлично работает, если тест пройден, но никогда не достигается, если тест не пройден, игнорируется или не дает результатов.
Чтобы сделать вещи более сложными, "// делать вещи" в TearDown
может также привести к сбою теста, и в этом случае он все равно должен быть зарегистрирован. НО Assert
генерирует исключение, что означает, что он покидает блок и никогда не достигает кода сообщения.
[SetUp]
public void ExampleSetup()
{
//whatever
}
[Test]
public void ExampleTest()
{
//whatever
}
[TearDown]
public void ExampleTearDown()
{
//do stuff
someObject.ReportTestResult();
}
Больше информации - Использование NUnit 3.2.0
2 ответа
Честно говоря, это просто плохая идея. TearDown является частью вашего теста. Вот почему это может потерпеть неудачу. (Но учтите, что NUnit обрабатывает ошибку подтверждения при разрыве как ошибку, а не как ошибку)
Поскольку тест может делать что угодно - хорошее или плохое, правильное или неправильное - внесение вашего логина в тестовый код ненадежно. Вы должны войти в код, который запускает тесты, а не в сами тесты. Как указано выше, TearDown является частью вашего теста. Так же как и любой ActionAttribute, который вы можете определить, как предлагается в другом ответе. Не делайте входа там.
К сожалению, в тестах была история ведения журналов, потому что NUnit либо не предоставил альтернативу - по крайней мере, такую, которая была бы проста в использовании. Для NUnit V2 вы можете создать надстройку прослушивателя тестовых событий именно для этой цели. Вы все еще можете, если это версия NUnit, которую вы используете.
Для NUnit 3.0 и выше вы должны создать расширение слушателя, которое работает с TestEngine. TestEngine и его расширения полностью отделены от ваших тестов. Получив хорошо протестированное расширение, вы сможете использовать его со всеми своими тестами, и тесты не будут загромождены кодом регистрации.
Посмотрев главу " Расширяемость инфраструктуры" документации NUnit, мы увидим, что вам нужно использовать атрибут действия.
Точка расширения атрибута действия:
Предназначен для лучшей компоновки логики теста путем создания атрибутов, которые инкапсулируют определенные действия, которые необходимо выполнить до или после запуска теста.
Краткое изложение базовой реализации этой точки расширения
Вам необходимо реализовать ITestAction
Интерфейс в вашем данном слове FooBarActionAttribute()
учебный класс.
Учитывая это, вы реализуете BeforeTest()
, AfterTest()
а также Targets
имущество.
Для базового сценария вам необходимо выполнить свои пользовательские операции двумя вышеуказанными способами.
Последнее, что вам нужно сделать, это использовать этот атрибут, например, как:
[Test][FooBarActionAttribute()]
public void Should_Baz_a_FooBar() {
...
}
Это будет выполнено прямо до и после запуска тестового метода.
Для более продвинутых методов, пожалуйста, обратитесь к соответствующей документации, это довольно просто.