2012-04-24 13 views
7

Estoy usando NUnit. He mi método de ensayo definido likeso:NUnit. Pasar los parámetros al método de desmontaje

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

Después de un TestCase ha terminado, entra en el Método TearDown. Lo que desea hacer es tener esos parámetros TestCase que se pasan al método de prueba pero que también pasan al método TearDown.

Algo como esto:

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

espero que NUnit apoya esta fuera de la caja. De lo contrario, tengo que escribir un código personalizado en el método de prueba para almacenar los datos de prueba en una colección. Entonces esa colección se usa en el método TearDown.

Si alguien tiene alguna idea ... sería genial! Gracias. Christian

Respuesta

9

TearDown y SetUp se ejecutan para cada una de las pruebas en el dispositivo de prueba. Considere usted tiene pruebas siguientes:

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

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

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

Lo que se espera que la firma del método TearDown?

Entonces, la respuesta es no. NUnit no proporciona la forma predeterminada de pasar el parámetro de prueba al método TearDown. Y creo que no. Necesita agregar esta funcionalidad manualmente.

+0

Pensé que NUnit no lo soportaba después de mucho googlear. Pero gracias por tu respuesta. Siempre es bueno verificarlo. –

4

En realidad, esto es posible.

Si hace referencia al TestContext.CurrentContext.Test.Name en TearDown, puede obtener la firma de método completa que contiene los parámetros que se pasaron en ella. Tendrás que analizarlo, pero está allí.

2

Es posible hacer referencia a los parámetros a la prueba directamente desde TestContext en la función TearDown.

Algo como esto.

[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; 
} 

Cabe señalar que TestContext.CurrentContext.Test.Arguments es sólo un conjunto de objetos y se llamaría para cada prueba en el TestFixture independientemente de las firmas individuales, de modo que debemos tener cuidado para asegurar nos ocupamos de todos los valores posibles en Arguments[] pero Ciertamente es posible referenciar estos objetos en la función TearDown

+0

+1. ** Nota: ** _si alguien va a usar el enfoque de respuesta, se debe verificar la versión de NUnit_ - una matriz de 'Argumentos' está disponible desde [v3.7] (https://github.com/nunit/nunit)/pull/2096), – Serg

Cuestiones relacionadas