studio - unit test c# ejemplo
¿Es posible parametrizar una prueba nunit? (6)
Me gustaría escribir una función invocable que acepte dos objetos y compare más de 30 propiedades de esos objetos con aserciones. El problema es que esto debe hacerse para aproximadamente 20 pruebas de unidades existentes y la mayoría de las pruebas futuras, y escribir las más de 30 afirmaciones cada vez consume tiempo y espacio.
Actualmente tengo una función de prueba no unitaria que compara los objetos y devuelve una cadena con "pasar" o un mensaje de error, y uso una aserción para validar eso en cada prueba unitaria. Sin embargo, es bastante desordenado y siento que estoy yendo en contra de los métodos apropiados de prueba de unidad.
¿Hay una manera de hacer que una función que se puede llamar desde las pruebas unitarias internas use aserciones para verificar las condiciones?
Necesitará el atributo TestCase:
[TestCase("string1",...)
public void test_UnitTest(string Parameter)
{
...
Assert.AreEqual(Parameter, result)
}
Tenga en cuenta que esto solo funciona con tipos de datos primitivos como cadenas e ints; no puede crear una instancia de su propia clase y usarla como parámetro.
Para responder a la parte final, por supuesto, puede tener Asserts dentro de otra función. Las afirmaciones funcionan aumentando las excepciones que detecta el corredor de pruebas, y las interpreta como una falla, por lo que una prueba como así funcionará bien:
public void CheckAsserts(string value)
{
Assert.IsNotNull(value);
}
[TestCase("yes!")]
public void MyTest(string value)
{
CheckAsserts(value);
}
Puedes usar el atributo TestCase
:
[TestCase("hostname1parameter")]
[TestCase("hostname2parameter")]
public void Example_TestHostName(string hostname)
{
...
}
Sí, las pruebas unitarias son como cualquier otro código.
En particular, echa un vistazo a http://nunit.org/?p=testCase&r=2.5 .
Si está utilizando NUnit 2.5.5 o superior, esto es posible usando el atributo TestCase.
Las pruebas unitarias normales se decorarían con [Prueba], pero podemos reemplazar eso de la siguiente manera:
[TestCase("0", 1)]
[TestCase("1", 1)]
[TestCase("2", 1)]
public void UnitTestName(string input, int expected)
{
//Arrange
//Act
//Assert
}
Ese tipo de cosas será la forma de hacerlo, obviamente, tomar diferentes parámetros.
Mira esto para obtener ayuda: http://nunit.org/?p=testCase&r=2.5
También puede beneficiarse del uso de la introspección de C #. Esto le permite obtener los nombres de los campos sin especificarlos en el código. A continuación, puede invocarlos por su nombre.
System.Attribute [] attrs = System.Attribute.GetCustomAttributes (t);
Esto le permite escribir ciertos tipos de pruebas que se aplicarán a las clases que aún no ha escrito.