2012-04-05 15 views
7

que tengo una clase de prueba de la siguiente manera:no todas las pruebas se ejecutan en parametrizados matrices que contienen NUnit TestFixture

[TestFixture("someurl1", new[] { "param1", "param2" }, 15)] 
[TestFixture("someurl2", new[] { "param3" }, 15)] 
public class my_test 
{ 
    public my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
    } 
} 

Al ejecutar esta prueba en ReSharper 6.1 y NUnit 2.5.10, la prueba no se ejecuta dos veces, como esperado, solo se ejecuta una vez. En los resultados de la prueba que veo enumerado

my_test("someurl1", System.String[], 15) 

Esto me hace pensar que los dos aparatos están siendo tratados como el mismo, y que no NUnit es diferenciar entre las matrices de cadenas en las dos pruebas.

Como solución alternativa he agregado un parámetro ficticio en el constructor. Si ajusto esto a un valor diferente para cada dispositivo, entonces se ejecutarán todas las pruebas.

¿No es posible tener TestFixtures con matrices que contienen valores diferentes? Acabo de actualizar de ReSharper 5, así que me pregunto si eso está relacionado. He leído sobre algunos problemas con las pruebas parametrizadas en 6.x.

+0

¿Funciona en el corredor de NUnit? – Scroog1

+0

Además, gracias por señalar que puede tener accesorios de prueba con parámetros, ya que no sabía que esto fuera posible. – Scroog1

+1

Acabo de probar en el corredor NUnit y eso ejecuta todas las pruebas con éxito. Creo que podría estar relacionado con la actualización de ReSharper. –

Respuesta

0

Creo que esto está relacionado con la actualización de una matriz en el constructor TestFixture, leí en alguna parte que no se puede hacer eso.

0

¿Ha intentado crear pruebas individuales debajo de él como TestFixture genérico ??? Algo así como

[TestFixture] 
public class my_test 
{ 
    private bool my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
     return DidTestCompleteOk; 
    } 

    [Test] 
    public void TestURL1() 
    { 
     Assert.IsTrue(my_test("someurl1", new[] { "param1", "param2" }, 15)); 
    } 

    [Test] 
    public void TestURL2() 
    { 
     Assert.IsTrue(my_test("someurl2", new[] { "param3" }, 15)); 
    } 
} 
4
[TestFixture("someurl1", "param1|param2", 15)] 
[TestFixture("someurl2", "param3", 15)] 
public class my_test 
{ 
    private string[] _fields; 

    public my_test(string url, string fieldList, int someVal) 
    { 
     _fields = fieldList.Split('|'); 
     // test setup 
    } 

    [Test] 
    public void listFields() 
    { 
     foreach (var field in _fields) 
     { 
      Console.WriteLine(field); 
     } 
    } 
} 
0

Resulta que este es el mensaje de error absoluto si algo va mal en el constructor de un accesorio de prueba con parámetros. No obtiene la información de excepción real devuelta como cuando algo falla en otro código.

Por lo tanto, probablemente deba mover su código de configuración a [SetUp] o [TestFixtureSetUp] o asegúrese de que su constructor se esté ejecutando sin error. Pero realmente deberías estar haciendo la primera sugerencia, y solo guardar los parámetros del dispositivo de prueba en el constructor y hacer algo con ellos en otro método.

Cuestiones relacionadas