unitarias unit test pruebas ejemplo atdd unit-testing testing visual-studio-2012

unit-testing - unit - tdd ejemplo



vstest.executionengine.x86.exe no se cierra (5)

Esto es por diseño.

El archivo vstest.executionengine.exe se reinicia solo cuando detectamos un cambio en la configuración entre dos ejecuciones de prueba consecutivas. Esto ayuda a asegurar que no estamos teniendo un golpe de percusión en reinicios de procesos innecesariamente.

Actualización de producto Con VS2013, tenemos un nuevo elemento de menú en Prueba -> Configuración de prueba llamada "Mantener ejecutándose el motor de ejecución de prueba". Puedes desmarcar esto para inhabilitar el comportamiento predeterminado.

He encontrado un error al ejecutar pruebas unitarias. Si depuro las pruebas unitarias, se ejecuta vstest.executionengine.x86.exe, luego se cierra cuando pasan las pruebas.

Si solo ejecuto las pruebas (incluso si la prueba es tan simple como crear una lista nueva, sin aserciones) vstest.executionengine.x86.exe no se cierra y se mantiene ejecutándose en el administrador de tareas.

Esto está causando un problema para mí cuando se trata de escribir pruebas más complicadas que incluyen eliminar archivos / limpiar bases de datos sqllite.

Cualquier ayuda sería apreciada.

EDITAR:

Pasos para reproducir :

  • Crear un nuevo proyecto de prueba de unidad
  • Pruebas unitarias de depuración: vstest.executionengine.x86 abre y cierra, prueba pases.
  • Ejecutar pruebas unitarias: vstest.executionengine.x86 se abre y permanece abierto

Por lo que vale, me encontré con esta misma situación y resultó que tuve una prueba que no limpió adecuadamente todos sus recursos. En mi caso específico, había un hilo de fondo con una conexión de red abierta que no se cerraba antes de salir de la prueba. No estoy seguro de por qué salir de la prueba no cerró esto para mí, pero cuando arreglé mi código para deshacerme de todos los recursos que abrí, todo funcionó como se esperaba. No tuve que agregar ningún vstest.executionengine.exe para matar al vstest.executionengine.exe , ni tuve que vstest.executionengine.exe la opción Test -> Test Settings -> Keep Test Execution Engine Running


Sé que esto es viejo, pero pensé que lanzaría algo que acabo de descubrir.

Una prueba que estaba ejecutando tenía algunos objetos que implementaban IDisposable , por lo que el análisis de código me lo dijo también en mi clase de prueba. Me tomó un tiempo darme cuenta, pero cuando esto. this.Dispose(); Me llamaron a la implementación de esa interfaz cuando la puse en mi clase de prueba, en realidad estaba lanzando una excepción de . Así que simplemente tiré de la interfaz y dejé que CA continuara gimiendo.

No necesité cambiar ''Ejecutar ejecución del motor de prueba''.


Trabajé alrededor de esto utilizando lo siguiente como un evento de preconstrucción en los proyectos de prueba afectados:

para 64 bits:

taskkill /F /IM vstest.executionengine.exe /FI "MEMUSAGE gt 1"

o para 32 bits:

taskkill /F /IM vstest.executionengine.x86.exe /FI "MEMUSAGE gt 1"

Esto silenciosamente mata el motor de ejecución antes de construir el proyecto de prueba. El /FI "MEMUSAGE gt 1" evita que el comando (y, por lo tanto, la compilación) falle si el motor de ejecución no se está ejecutando.


Tuve este problema al ejecutar la prueba utilizando el corrector de prueba de Resharper, que no parece respetar la Test-->Test Settings-->Keep Test Execution Engine Running . En mi caso, estaba causando que la compilación fallara con el siguiente error:

Advertencia MSB3026: No se pudo copiar "... / SQLite.Interop.dll" a "bin / Debug / x86 / SQLite.Interop.dll". Comienzo reintentar 10 en 1000 ms. El proceso no puede acceder al archivo ''bin / Debug / x86 / SQLite.Interop.dll'' porque está siendo utilizado por otro proceso.

Agregar un evento de preconstrucción al proyecto de prueba como @HappyCat sugirió que funcionó para mí. También necesitaba envolverlo en una declaración if para evitar que se ejecute en el servidor de compilación e interfiera con otros trabajos.

if $(ConfigurationName) == Debug ( echo "attempting to kill vstest to prevent access denied on sqlite.interop.dll" taskkill /F /IM vstest.executionengine.x86.exe /FI "MEMUSAGE gt 1" )