В событии teardown во время теста NUnit как я могу получить атрибут, примененный к только что протестированному методу? - PullRequest
3 голосов
/ 18 апреля 2009

У меня есть метод испытания, который запускается. Когда метод генерирует исключение, я хочу знать, каким было имя теста и содержание исключения.

В раскрывающемся списке для теста я хочу получить доступ к этой информации. Как бы я мог получить к нему доступ с помощью [TearDown] атрибутивного метода?

Ответы [ 4 ]

2 голосов
/ 18 апреля 2009

Я не думаю, что есть хороший способ встроить nunit, но это не сложная проблема. Просто оберните ваши тесты в блок try / catch, перехватите все исключения и сохраните их (и имя теста) в закрытой переменной-члене в вашем классе теста. Тогда у вас есть доступ из вашего метода TearDown.

Не особенно элегантно, но работает.

1 голос
/ 03 июля 2015

Вы можете получить доступ к объектам текстового контекста в тестовом методе разрыва

[TearDown]
public void TestTearDown()
{
  // inc. class name
  var fullNameOfTheMethod = NUnit.Framework.TestContext.CurrentContext.Test.FullName; 
  // method name only
  var methodName = NUnit.Framework.TestContext.CurrentContext.Test.Name;
  // the state of the test execution
  var state = NUnit.Framework.TestContext.CurrentContext.Result.State; // TestState enum
}

Я не знаю, какая версия была первой, чтобы поддержать его, но моя версия - 24.

1 голос
/ 19 августа 2010

Другое решение - использовать шаблонный метод и запустить все тесты с использованием этого метода. Например:

// template method
void Execute(Action test)
{
    try
    {
        test();
    }
    catch (Exception e)
    {
        // handle exception here
        throw;
    }
}

[Test]
public void Test()
{
    Execute(() =>
        {
            // your test here
        });
}

Этот шаблон особенно полезен, когда ваш тест использует некоторые ресурсы, которые должны быть инициализированы до теста и удалены после теста (например, временный файл). В этом случае вы можете использовать параметр типа в тестовом делегате.

Еще одним преимуществом является то, что вы можете легко запустить тест в другом потоке, используя другую культуру и т. Д.

Недостаток очевиден: он заставляет вас использовать лямбда-метод в каждом тесте.

0 голосов
/ 18 апреля 2009

ВАРИАНТ 1: Не думаю, что вы можете. Вернее, я не знаю, что ты можешь. Я подхожу к этой необходимости, используя try / catch для конкретных тестов, делаю то, что хочу, с исключением, а затем снова бросаю его в блоке catch, чтобы тест не удался.

try{
    // do something that can potentially throw;
}
catch(Exception ex){
    // do something interesting with the ex;
    throw;
}

ВАРИАНТ 2: Если вы не зашли слишком далеко, возможно, вы захотите использовать xUnit, который имеет другую модель ожидания исключений и может предоставить часть искомого элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...