net - unit test project c#
NUnit no puede reconocer un TestCase cuando contiene una matriz (3)
Este es un comportamiento bastante simple pero molesto que estoy encontrando con NUnit:
Tengo algunas pruebas como esta:
[Test]
[TestCase( 1, 2, "hello" )]
[TestCase( 3, 5, "goodbye" )]
public void MyClass_MyMethod( int a, int b, string c )
{
Assert.IsTrue( a < b );
}
Esto funciona bien y en el panel ReSharper NUnit puedo ver que cada TestCase obtiene su propia respuesta en el resultado.
Tengo un segundo TestCase que se ve así:
[Test]
[TestCase( 1, 2, new long[] { 100, 200 })]
[TestCase( 5, 3, new long[] { 300, 500 })]
public void MyClass_MyOtherMethod( long a, long b, long[] bunchOfNumbers )
{
Assert.IsTrue( a < b );
}
Cuando lo ejecuto veo esto:
Una o más pruebas de niños tuvieron errores. Excepción no tiene un seguimiento de pila.
Public void MyClass_MyOtherMethod (5,3, System.Int64 []) falló
La diferencia es que con mis otras pruebas extrae cada TestCase como una casilla de verificación separada en la lista de pruebas, mientras que esta no se muestra y no tengo detalles hasta que la ejecuto en un depurador en cuanto a qué salió mal y dónde. Estoy un poco preocupado acerca de cómo se comportará esta prueba en la máquina de compilación. ¿Alguien tiene alguna idea de lo que está pasando y por qué?
A raíz de este error en JetBrains , parece que la solución aquí es usar el atributo TestName
en sus diferentes casos:
[Test]
[TestCase( 1, 2, new long[] { 100, 200 }, TestName="Test 1" )]
[TestCase( 5, 3, new long[] { 300, 500 }, TestName="Test 2" )]
public void MyClass_MyOtherMethod( long a, long b, long[] bunchOfNumbers )
{
Assert.IsTrue( a < b );
}
Ahora todo se muestra correctamente en ReSharper si falla una de mis pruebas.
Para una matriz que contiene cadenas, use una matriz de object
con los atributos de TestCase
:
[Test]
[TestCase(new object[] {"foo", "bar", "baz"})]
[TestCase(new object[] {"300", "500", "700"})]
public void MyClass_SomeOtherMethod(string[] bunchOfStrings)
{
// assert something...
}
Una alternativa es usar una cadena para la matriz:
[TestCase( 1, 2, "100, 200")]
[TestCase( 5, 3, "300, 500")]
public void MyClass_MyOtherMethod(long a, long b, string bunchOfNumbersString)
{
var bunchOfNumbers= bunchOfNumbersString.Split('','')
.Select(long.Parse)
.ToArray();
...
}
La ventaja de este enfoque es que se reproducirá bien en el testrunner.
Nota al [TestCase]
: el [Test]
no es necesario cuando se usa [TestCase]
o al menos no veo que resuelva un problema.