2012-02-15 14 views
7

Tengo una solución .NET 4.0 C# con un proyecto de pruebas que ejecuta pruebas unitarias bajo NUnit. Los binarios de NUnit son v3.5.Pruebas de depuración que se ejecutan bajo NUnit

Puedo ejecutar las pruebas perfectamente pero no puedo establecer puntos de interrupción y un solo paso en Visual Studio. Supongo que esto es causado por el desajuste en las versiones de .NET. ¿Hay alguna forma de pasar un solo paso a través de un ensamble de pruebas v4.0 usando nunit para v3.5?

+0

Debería poder establecer puntos de interrupción en este caso. ¿Cómo está ejecutando las pruebas y cómo está conectando el depurador? –

+0

@FrankSchwieterman Las propiedades de depuración de mi proyecto tienen una acción de inicio que apunta a nunit-console.exe y comandos de línea de comandos que contienen nunit args. Estoy configurando puntos de interrupción y luego selecciono Depurar en el explorador de soluciones para las pruebas csproj. El depurador se ejecuta y el estado del punto de interrupción cambia con el error "No se pueden cargar símbolos" – simonc

+0

hmm. No parece que Visual Studio se haya conectado al proceso de ejecución de las pruebas (se adjuntará a la aplicación para la que aciertes f5, aunque la aplicación tiene un paso de compilación para iniciar NUNit) –

Respuesta

21

El problema es que a menos que indique lo contrario, NUnit generará un subproceso para ejecutar las pruebas cuando lo considere necesario. Si lo mira en Process Explorer, puede ver que "nunit-console.exe" * genera "nunit-agent.exe" *. El depurador de Visual Studio no se conecta automáticamente a procesos secundarios.

En este caso, creo que la versión no coincidente es la razón por la que elige iniciar un subproceso. La forma más fácil de evitar esto es editar "nunit-console.exe.config" * para cambiar el conjunto de valores <supportedRuntime>. No debería estar ya hay un comentario que marca la línea que se debe comentar con el fin de obligar a que se ejecute como .NET 4.0:

<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <!-- Comment out the next line to force use of .NET 4.0 --> 
    <supportedRuntime version="v2.0.50727" /> 
    <supportedRuntime version="v4.0.30319" /> 
</startup> 

Una vez que cambie eso, el primer proceso NUnit ya estará .NET 4.0 y no debería necesitar generar un subproceso. Si quiere estar seguro, especifique /process=Single y NUnit se ejecutará en un único proceso o fallará de inmediato si no puede.

* - Si es necesario utilizar las versiones x86, sustituto:

nunit-console.exe  -> nunit-console-x86.exe 
nunit-agent.exe   -> nunit-agent-x86.exe 
nunit-console.exe.config -> nunit-console-x86.exe.config 
+0

Gracias, eso hizo el truco – simonc

+0

Impresionante, gracias. Ya había visto que se suponía que debías agregar los elementos soportados en tiempo de ejecución, lo que no había funcionado. No me había dado cuenta de que estaba usando la versión x86 y que tenía su propio archivo de configuración. – neminem

+0

¿qué tal /framework:net-4.0? – bmargulies

1

Resharper le permite pasar por las pruebas de su Unidad durante la depuración. Pero no creo que puedas hacer lo mismo con Visual Studio. Intenta instalar la versión de prueba de Resharper y luego intenta depurar las pruebas.

+0

Resharper a veces tampoco funciona bien, cuando intenta hacer un solo paso se abre paso al siguiente punto de interrupción. Algunas veces eso sucede. No sé por qué =) –

+0

Gracias, eso funciona bien. ¡Estoy seguro de que también pude hacer esto con Visual Studio pero también funciona con ReSharper! – simonc

+0

Si desea usar Visual Studio sin Resharper, será mejor si usa MSTest en lugar de NUnit. Las diferencias en sintaxis son bastante mínimas. – gprasant

1

Estoy seguro de la aplicación de consola, pero debe encontrar que puede iniciar manualmente la versión GUI de NUnit y luego adjuntarlo al proceso nunit-agent del depurador en Visual Studio.

+0

Gracias, ¿sabes si esto todavía está disponible en nunit 2.6? Puedo ver el código para nunit-gui pero no puedo ver un exe en los archivos binarios preconstruidos – simonc

+1

* nunit.exe * es la versión de la GUI. * nunit-console.exe * es la versión de la consola. La ejecución de nunit.exe generará el proceso nunit-agent. –

2

Otra opción es usar http://testdriven.net/ para ejecutar sus pruebas a través de Visual Studio, puede poner un punto de interrupción en una prueba & haga clic derecho -> ejecutar pruebas -> con depurador.

3

En caso de que sea útil a alguien Sé que esto es de 4 años de edad, pero he seguido las respuestas aquí y eran útiles. Aunque mi respuesta es para otra versión completa de NUnit, sin embargo, para alguien como yo que está descubriendo esto, instalé NUnit y NUnit Console a través de Manage NuGet Packages ... (primera y tercera opción en la captura de pantalla) enter image description here y así configurada la propiedad Propiedades del proyecto de prueba de la pestaña Depuración (vea la siguiente captura de pantalla a continuación) en la edición de Comunidad VS2015 para ejecutar nunit3-console.exe que se encuentra fuera de la carpeta \ packages que se crea automáticamente cuando instala "NUnit Console" y para los argumentos agregué mi la biblioteca de prueba dll y la línea de comandos cambia --wait (lo que le pide al desarrollador "Presione cualquier tecla para cerrar" para ver el resultado), y más importante aún --inprocess que conecta automáticamente el código .NET de su biblioteca de prueba para que sus puntos de quiebre son golpeados

enter image description here

Nota para ejecutar la aplicación de consola NUnit3 configura su proyecto de prueba como el proyecto de puesta en marcha.

+0

Exactamente lo que quería Gracias – user515867

Cuestiones relacionadas