2009-11-30 7 views
5

En una solución compleja VS2008 tengo tres proyectos de prueba de unidad. Como operan en la misma base de datos de prueba, es importante que los proyectos de prueba se ejecuten uno después del otro. No es importante qué proyecto primero, solo que uno termina antes de que comience el otro.Secuencia de prueba unitaria al ejecutar todas las pruebas en la solución

Si quiero ejecutarlos todo, hay varias maneras de hacerlo, que conducen a diferentes resultados:

  • Tengo una lista de archivos de prueba .vsmdi donde las pruebas están clasificadas por proyecto. Si abro la lista y ejecuto las pruebas desde el editor de la lista de prueba, todo está bien.
  • Si abro la ventana de Vista de prueba, ordeno las pruebas por proyecto y las ejecuto, de nuevo todo está bien.
  • Sin embargo, si ejecuto las pruebas seleccionando 'Prueba -> Ejecutar -> Todas las pruebas en solución' del menú, se ejecutan en orden aleatorio donde algunas fallan, ya que uno de los otros proyectos de prueba ya manipuló la prueba db.

Entonces, la pregunta es, ¿qué determina la secuencia de prueba unitaria cuando se utiliza el tercer enfoque? ¿Hay alguna manera de especificar una lista de prueba predeterminada en .testrunconfig?

Como hay soluciones, el problema no es crítico en absoluto. Pero cualquier pensamiento es bienvenido. Gracias.

Respuesta

8

Está experimentando un olor de prueba de unidad llamado Pruebas interactivas, descrito en el excelente xUnit Test Patterns. Más específicamente, usted sufre de una Shared Fixture, que es otra forma de decir que varias de sus pruebas usan la misma base de datos compartida, y que dependen del resultado de las pruebas anteriores.

Este es un antipatrón y se debe evitar a toda costa. El libro ofrece una amplia guía sobre cómo lidiar con esta situación.

La razón por la que empiezo describiendo esto es que esta es la razón por la cual MSTest no garantiza el orden de las pruebas. Aunque el orden puede parecer (semi) determinista, no puede confiar en él. Algunos marcos de prueba de otras unidades (viene a la mente xUnit.NET) llegan incluso a ejecutar pruebas en orden aleatorio cada vez que ejecuta el conjunto de pruebas. MSTest no es tan extremo, pero no hay manera de que pueda ordenar sus pruebas unitarias.

Dicho esto, si está ejecutando Visual Studio Team Suite o (creo) Team Test, hay un tipo de prueba llamada Ordered Test. Puede usar eso para especificar que todas las pruebas (incluidas las pruebas unitarias) se ejecuten en un orden específico.

+0

Estoy completamente de acuerdo con que se debe evitar un dispositivo compartido. Sin embargo, el problema aquí no es el orden de las pruebas, sino el hecho de que los proyectos de prueba se ejecutan en paralelo, lo que genera problemas de sincronización con la configuración y el desmontaje de la base de datos. No lo describí con suficiente detalle. Creo que ahora la mejor solución es una configuración y desmontaje global de la base de datos. – Wullie

+0

No creo que MSTest ejecute pruebas en paralelo; al menos, esa no es mi experiencia en absoluto. –

Cuestiones relacionadas