Cómo ejecutar en xUnit un conjunto de tests sobre un mismo método de Test
En diferentes situaciones, puede parecernos útil ejecutar un conjunto de tests sobre un mismo método de Test.
Imaginemos que queremos ejecutar un método de Test.
Este método tiene que abarcar diferentes situaciones y en lugar de hacer un método por cada una de las situaciones, queremos hacer un único método que cumpla todas ellas.
En realidad, si las situaciones a cubrir son pocas, es casi mejor hacer un método por situación, pero tampoco es mala idea cubrirlas todas al mismo tiempo.
Todo depende como siempre, del contexto en el que estemos.
A pesar de todo esto, dento de xUnit tenemos una forma particular de llevar a cabo esta tarea.
En lugar de decorar el test con Fact, deberemos decorarlo con Theory.
De esta manera, introduciremos tantas teorías como supuestos queramos cubrir.
Esto lo haremos gracias a otro atributo adicional que deberemos agregar en el test y que es el atributo InlineData.
Dentro de InlineData deberemos indicarle el valor o valores que queremos probar, y el resultado esperado.
Pondremos tantos InlineData como tests queramos lanzar.
Dentro del Test bastará con poner el Test como si fuera para un sólo valor.
xUnit iterará por nosotros ejecutando tantos tests como atributos InlineData metamos en el test.
Un ejemplo tipo fake de este planteamiento sería el siguiente:
[Theory] [InlineData(1, 2, 3)] [InlineData(2, 2, 4)] [InlineData(2, 3, 5)] [InlineData(2, 4, 6)] [InlineData(3, 4, 7)] public void FooTest(int value1, int value2, int expectedResult) { var returnedResult = CalculateSum(value1, value2); Assert.Equal(expectedResult, returnedResult); } private int CalculateSum(int value1, int value2) { return value1 + value2; }
Una vez que ejecutamos nuestro conjunto de tests, si uno de ellos falla, aparecerá con claridad la información relevante del valor esperado que ha fallado y el resultado que se tenía que haber dado.
Espero que te ayude.
¡Happy Coding!
One Responseso far
Muchas gracias por la información! Iba buscando este código.