¿Cómo gestiona NUnit (y MSTest) las pruebas que cambian las variables estáticas / compartidas?
-
03-07-2019 - |
Pregunta
Tengo algún código que utiliza el patrón de la puerta de enlace compartida para implementar una inversión del contenedor de control. Tengo varios cientos de pruebas unitarias NUnit que ejercitan el código que usa este IOC. Todos funcionan (¡en mi máquina!) Pero me preocupa que estas pruebas puedan fallar bajo carga. Me parece recordar que NUnit (y MSTest) intentan ejecutar pruebas en paralelo en varios subprocesos (lo que definitivamente provocaría condiciones de carrera en la puerta de enlace estática / compartida) pero no puedo encontrar ninguna documentación que diga lo que realmente sucede. Mi experiencia es que NUnit parece estar ejecutando las pruebas secuencialmente. Mi pregunta es, ¿NUnit (o MSTest) alguna vez ejecuta pruebas unitarias en paralelo? Si es así, ¿en qué condiciones? Y, ¿puedo desactivar esto mediante algún tipo de opción de configuración?
Solución
Actualización :
Visual Studio 2010 introdujo la capacidad de ejecutar pruebas en paralelo.
Aquí hay un artículo paso a paso sobre cómo habilitar esto.
MsTest:
Entonces, de acuerdo con David Williamson, de Microsoft Visual Studio Team System, en esta publicación en los foros de MSDN:
Las pruebas NO se ejecutan en absoluto paralelo cuando se ejecuta en VS o a través mstest.exe. Si se ejecutan en una Prueba de carga a través de VS entonces eso es una historia diferente. Ejecución básica, sin embargo, siempre es serial.
Además, las pruebas que se ejecutan con MsTest se ejecutan con un subproceso diferente para garantizar que tenga una pizarra limpia para cada prueba. No hay forma de deshabilitar este comportamiento.
NUnit:
NUnit ejecuta todas las pruebas en el mismo hilo.