unit test net framework dotnet c# unit-testing nunit testcase

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.