2012-04-24 5 views
7

Я использую NUnit. Я мой метод испытания определяется likeso: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.

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

ответ

9

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. И я думаю, что это не так. Вам нужно добавить эту функцию вручную.

+0

Я думал, что NUnit не поддержал его после многого поиска в Google. Но спасибо за ваш ответ. Всегда хорошо проверять. –

4

Собственно, это возможно.

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

2

Ссылка на параметры для теста можно непосредственно связать с 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[] но это, конечно, is можно ссылаться на эти объекты в функции TearDown

+0

+1. ** Примечание: ** Если кто-то собирается использовать подход ответа, следует проверить версию NUnit_ - массив аргументов доступен с [v3.7] (https://github.com/nunit/nunit/тянуть/2096), – Serg

 Смежные вопросы

  • Нет связанных вопросов^_^