2012-09-20 12 views
5

Tengo una situación en la que estoy usando una prueba unitaria para ejecutar una herramienta externa que realiza una prueba. Puedo determinar a partir del código de salida de la herramienta si la prueba pasó, falló o se agotó el tiempo de espera.Programado el tiempo de espera de una prueba en MSTest

¿Hay algún modo en que pueda fallar la prueba de unidad que establecerá el tiempo de espera de la prueba en lugar de fallar?

He intentado lanzar una TimeoutException, pero esto tiene el mismo resultado que usar un Assert.

Edit: Estamos vinculando las pruebas de la unidad con casos de prueba en TFS. En Microsoft Test Center, una prueba en una ejecución de prueba puede tener muchos estados. Uno de los cuales es el estado de tiempo de espera. Estoy intentando suspender mi prueba para que se muestre correctamente en este estado y no se agrupe con los casos de prueba fallidos.

+0

Si la prueba se basa en una herramienta externa para hacer un trabajo, entonces no es una prueba de unidad. Lo ideal es burlarse de la herramienta externa para que pueda probar * su * código, independientemente de si * su * código funciona como se esperaba. –

+4

@Jamie: Eso es quisquilloso. Probablemente esté haciendo una prueba de integración pero (como muchas otras personas) lo llama prueba unitaria solo porque se ejecuta en un corredor de prueba. – erikkallen

+0

Podría ser @erikkallen, sin embargo, también podría tener la intención de escribir esto como una prueba de unidad, pero no comprende completamente la burla o sabe que es algo que debe hacerse. En el caso de este último, mi comentario podría empujar al OP en una dirección útil, si no, no causar daño. –

Respuesta

1

En las pruebas de unidad, deseche con 2 colores: verde y rojo. No hay tiempo de espera color.

así que supongo que podría fallar manualmente la prueba en caso de que sus herramientas de tiempos de espera externos:

Assert.Fail("External tool used to do this test timed out"); 

La forma de detectar que sus herramientas externas ha agotado el tiempo, por supuesto, depende de la herramienta externa que está utilizando y la forma en que lo invoca desde su prueba de unidad.

+0

Eche un vistazo al Microsoft Test Center y encontrará más que solo verde y rojo. Si una prueba toma demasiado tiempo (se agota el tiempo de espera), también obtiene Amarillo. – Christo

+0

Estoy tentado de votar esta respuesta porque creo que quedó claro por la pregunta (incluso en su forma original) que no es exactamente lo que estoy preguntando y que ya he considerado usar un Assert. – Christo

0

Su enfoque lanzando un TimeoutException parece ser una buena opción. Sin embargo, el TimeoutException no deriva de UnitTestAssertException.

Es posible que desee realizar una de las siguientes cosas:

  1. lanzar una AssertFailedException que indica la razón de por cadena.

  2. Subclase UnitTestAssertException con un UnitTestTimeOutException personalizado y arroje eso.

  3. Use Assert.Fail como @ Darin-Dimitrov suggested.

1

No es realmente "programación", pero usted podría:

Su prueba solo debe esperar si se reconoce que la herramienta externa vuelve con el tiempo de espera código de salida (esto sería la parte más "programático".)

lo tanto, el marco de pruebas fijará el resultado de la prueba de "Tiempo de espera" para usted.

Especialmente si sus pruebas son automáticas, sería una solución adecuada, supongo.

12

Se puede establecer límite de espera por prueba, usando la suma de tiempo de espera (milisegundos) en el atributo de prueba ...

[TestMethod, Timeout(2000)] 

prueba fallará si la ejecución tarda más de 2 segundos.

Gracias Marko

Cuestiones relacionadas