Единица измерения Передача параметров в метод разрыва

Я использую NUnit. У меня есть метод тестирования, определенный так:

[Test]
[TestCase("Fred", "Bloggs")]
[TestCase("Joe", "Smith")]
public void MyUnitTest(string firstName, string lastName)
{
    ...
}

После завершения TestCase он переходит к методу TearDown. Что хотелось бы сделать, так это иметь те параметры TestCase, которые передаются в тестовый метод, но также передаются в метод TearDown.

Что-то вроде этого:

[TearDown]
public void TearDown(string firstName, string lastName)
{
  ...
}

Я надеюсь, что NUnit поддерживает это из коробки. В противном случае мне нужно написать специальный код в тестовом методе для хранения тестовых данных в коллекции. Затем эта коллекция используется в методе TearDown.

Если у кого есть какие мысли..было бы здорово! Спасибо. христианин


person Christian Clarke    schedule 24.04.2012    source источник


Ответы (3)


Можно ссылаться на параметры теста непосредственно из TestContext в функции TearDown.

Что-то вроде этого.

[Test]
[TestCase("Fred", "Bloggs")]
[TestCase("Joe", "Smith")]
public void MyUnitTest(string firstName, string lastName)
{
}

[TearDown]
public void TearDown()
{
    string firstName = TestContext.CurrentContext.Test.Arguments[0] as string;
    string lastName = TestContext.CurrentContext.Test.Arguments[1] as string;
}

Следует отметить, что TestContext.CurrentContext.Test.Arguments — это просто массив объектов, и он будет вызываться для каждого теста в TestFixture независимо от отдельных сигнатур, поэтому мы должны быть осторожны, чтобы убедиться, что мы имеем дело со всеми возможными значениями в Arguments[], но это, безусловно, < /em> можно ссылаться на эти объекты в функции TearDown

person Stewart_R    schedule 21.12.2017
comment
+1. Примечание: если кто-то собирается использовать ответный подход, следует проверить версию NUnit — массив Arguments доступен, так как v3.7, - person Serg; 02.02.2018

TearDown и SetUp выполняются для каждого из ваших тестов в тестовом приспособлении. Предположим, у вас есть следующие тесты:

[TestCase("Joe", "Smith")]
public void Test1(string firstName, string lastName) { ... }

[Test]
public void Test2() { ... }

[TestCase(10)]
public void Test3(int value) { ... }

Какова ожидаемая сигнатура метода TearDown?

Итак, ответ - нет. NUnit не предоставляет способ передачи тестового параметра методу TearDown по умолчанию. И я думаю, что не будет. Вам нужно добавить эту функцию вручную.

person Sergey Berezovskiy    schedule 24.04.2012
comment
Я думал, что NUnit не поддерживает его после долгих поисков в Google. Но спасибо за ваш ответ. Всегда хорошо проверить. - person Christian Clarke; 24.04.2012

На самом деле это возможно.

Если вы сошлетесь на TestContext.CurrentContext.Test.Name в TearDown, вы сможете получить полную сигнатуру метода, содержащую переданные ему параметры. Вам придется разобрать его, но он есть.

person AtlasRider    schedule 18.03.2015