Подтвердить что ты не робот

NUnit - Можно ли проверить TearDown, прошел ли тест?

Я бы хотел, чтобы мой метод TearDown проверял, был ли предыдущий тест успешным, прежде чем он применит некоторую логику. Есть ли простой способ сделать это?

4b9b3361

Ответ 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. Подробнее см. здесь.