2009-10-20 16 views
25

Tenemos algunas pruebas de integración en nuestra solución. Para ejecutar estas pruebas, el software de simulación debe estar instalado en la pc del desarrollador. Sin embargo, este software no está instalado en todas las pc de desarrollo. Si el software de simulación no está instalado, estas pruebas se deben omitir de lo contrario ==> NullRefException.Ignorar prueba o TestFixture basado en la condición

Ahora estoy buscando una forma de hacer un "ignorar condicional" para tests/testfixtures. Algo así como

si (simulationFilesExist) hacer otra cosa TestFixture saltar TestFixture

NUnit dan algunas cosas útiles como ignorar y explícita, pero que no es tranquilo lo que necesito.

Gracias

Respuesta

39

Uso cierto código en su prueba o accesorio establecieron método que detecta si el software de simulación está instalado o no y llama Assert.Ignore() si no lo es.

[SetUp] 
public void TestSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting."); 
    } 
} 

o

[TestFixtureSetUp] 
public void FixtureSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting fixture."); 
    } 
} 
+0

¡Gracias por la respuesta rápida! Pero esto dará como resultado una prueba fallida, no realmente lo que quiero. El hecho de que la prueba no se haya ejecutado no significa que deba indicar que ha fallado (en mi caso). –

+3

No. Assert.Fail dará como resultado una prueba fallida. Assert.Ignore() hace exactamente lo que quieres que haga. Hace que la prueba se ignore en el tiempo de ejecución. Citando de los documentos: "El método Assert.Ignore le brinda la capacidad de hacer que una prueba o suite se ignore dinámicamente en el tiempo de ejecución". – tvanfosson

+0

Tienes razón tvanfosson. Cuando solo ejecuta la tabla de prueba, indicará que ha fallado, pero cuando ejecute un conjunto de tablas de prueba, se omitirá la tabla de prueba y el resultado final será EXITO. Muchas gracias. –

6

NUnit también le da la opción de suministrar un atributo de categoría. Dependiendo de cómo esté lanzando sus pruebas, puede ser apropiado marcar todas las pruebas que requieren el simulador con una categoría conocida (por ejemplo, [Categoría ("RequiresSimulationSoftware")]). Luego, desde NUnit Gui puedes elegir excluir ciertas categorías. Puede hacer lo mismo desde el corredor de línea de comando NUnit (especifique/excluya: RequiresSimulationSoftware, si corresponde).

Espero que esto (o la respuesta anterior de tvanfosson) ayude.

+1

Oye, pensé en esta solución. La desventaja de esta solución es que es específica de la persona que llama. A veces ejecutamos las pruebas desde VStudio y la otra vez desde un script. Ambos deben ser alterados y mantenidos. –

+0

+1. Me gusta mucho más que "Assert.Ignore", porque es solo atributo y bandera adicional para CLI en mi caso. –

1
[SetUp] 
public void TestSetUp() 
{ 
    if (!TestHelper.SimulationFilesExist()) 
    { 
     Assert.Ignore("Simulation files are not installed. Omitting."); 
    } 
} 

se utiliza este tipo de afección en TestFixtureSet Attribute. Pero si este dispositivo tiene una prueba parametrizada, entonces si desea ignorar la prueba parametrizada de este dispositivo, esto se aplica en un ciclo infinito y su prueba se colgará. Entonces, usa mejor el atributo setup para la condición if.

Cuestiones relacionadas