Я бы хотел, чтобы мой метод TearDown проверял, был ли предыдущий тест успешным, прежде чем он применит некоторую логику. Есть ли простой способ сделать это?
NUnit - Можно ли проверить TearDown, прошел ли тест?
Ответ 1
звучит как опасная идея, если это не интеграционный тест, скажем, данные, которые нужно удалить. Почему бы не сделать это в самом тесте?
Очевидно, что может быть установлен частный флаг в классе.
Это то, что Charlie Poole сам предложил если вы должны
Ответ 2
Это уже разрешено в ответе ответа на аналогичный вопрос SO. Цитирование Ran:
Начиная с версии 2.5.7, NUnit позволяет Teardown обнаруживать, завершился ли последний тест. Новый класс TestContext позволяет тестировать доступ к информации о себе, включая TestStauts.
Подробнее см. http://nunit.org/?p=releaseNotes&r=2.5.7
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Status == TestStatus.Failed)
{
PerformCleanUpFromTest();
}
}
Ответ 3
Если вы хотите использовать TearDown для определения состояния последнего теста с помощью NUnit 3.5, он должен быть:
[TearDown]
public void TearDown()
{
if (TestContext.CurrentContext.Result.Outcome.Status.Equals(TestStatus.Failed))
{
//your code
}
}
Ответ 4
Только если вы сделаете это вручную. На самом деле вы даже не будете знать, какие тесты предназначены для запуска. В среде NUnit IDE можно включить некоторые тесты и отключить некоторые другие. Если вы хотите узнать, запущен ли какой-либо конкретный тест, вы можете включить такой код в свой тестовый класс:
enum TestStateEnum { DISABLED, FAILED, SUCCEDED };
TestStateEnum test1State = TestStateEnum.DISABLED;
[Test]
void Test1()
{
test1State = TestStateEnum.FAILED; // On the beginning of your test
...
test1State = TestStateEnum.SUCCEDED; // On the End of your Test
}
Затем вы можете проверить переменную test1State. Если тест выдает исключение, он не установит значение SUCCEDED. вы также можете поместить это в блок catch try в своих тестах с немного другой логикой:
[Test]
void Test1()
{
test1State = TestStateEnum.SUCCEDED; // On the beginning of your test
try
{
... // Your Test
}
catch( Exception )
{
test1State = TestStateEnum.FAILED;
throw; // Rethrows the Exception
}
}
Ответ 5
Логика IMHO для разрыва должна быть независимой от результатов тестирования.
В идеале вам следует избегать установки и разрыва полностью, al xunit.net. Подробнее см. здесь.