2009-05-15 20 views
33

Utilizando Nunit, deseo poder escribir un dispositivo de prueba que lea todos los nombres de archivo en un directorio particular y cree una prueba para cada archivo.Crear dinámicamente pruebas en NUnit

Pude fácilmente escribir un método de prueba que escanea a través del directorio y solo hace todas las pruebas, pero cuando ejecuto NUnit quiero poder ver cada una de las pruebas individualmente.

¿Esto es posible?

Respuesta

46

He encontrado una manera que se adapte a mis propósitos

Tener un caso de prueba, y se marca con el TestCaseSource atribuir al igual que

[Test, TestCaseSource("GetTestCases")] 
public void TestFile(string filename) 
{ 
    //do test 
} 

A continuación, escriba los GetTestCases para leer toda la nombres de archivo en el directorio

private static string[] GetTestCases() 
{ 
    return GetAllFilesInCurrentDirectory(); 
} 

Entonces cuando comienzo NUnit puedo obtener una lista de las pruebas de ser ejecutar (listado bajo TestFile).

+0

Agradable y simple. El atributo también es bastante flexible, como se describe en los documentos (haciendo referencia a v2.5.2) aquí: http://nunit.com/index.php?p=testCaseSource&r=2.5.2 –

+0

NUnit rocks !! Hizo las cosas más simples. Estoy usando esta característica para las pruebas de integración – AksharRoop

+0

¿Cómo hacer que funcione en el corredor de prueba ReSharper? Muestra errores y falla en los cuadros de mensaje en lugar de mostrar la pila en la sesión de prueba – moudrick

1

Si no se van a añadir archivos a ese directorio con el tiempo y tiene un conjunto de nombres de archivo para pasar en como una entrada a una prueba genérica, intente utilizar el RowTest NUnit extension (parte del std distrib posterior v2. 4.7) - Podrá ver cada caso de prueba - combinación de entrada individualmente en la GUI agrupada en un solo nodo.

Si usted está va a ser la adición de archivos a ese directorio, me gustaría escribir una sola NUnit TestCase que se repite más de una lista de archivos obtenidos en tiempo de ejecución y llama al método de prueba genérico con cada ruta de archivo. Use un collecting parameter para recopilar los nombres de los archivos de prueba que fallen, al final de su afirmación. No podría ver cada caso de prueba individualmente, pero tendría un código de prueba simple y legible.

Assert.AreEqual(listOfFailedFiles.Length, 0, PrettyPrint(listOfFailedFiles)) 
+0

A menos que tenga miles de pruebas ... puede tardar algunas horas. – eocron

0

Sé que esto es un poco oscuro, pero he utilizado una secuencia de comandos en el pasado para generar código para mí, que luego puedo ejecutar como casos de prueba individuales.

Cuestiones relacionadas