2012-02-15 22 views
7

Ho una soluzione .NET 4.0 C# con un progetto di test che esegue test di unità in NUnit. I binari NUnit sono v3.5.Test di debug in esecuzione in NUnit

Posso eseguire i test perfettamente bene ma non posso impostare i punti di interruzione e il singolo passaggio in Visual Studio. Sto indovinando che questo è causato dal mis-match in versioni .NET. C'è un modo per un singolo passo attraverso un assembly v4.0 test utilizzando nunit per v3.5?

+0

In questo caso, è possibile impostare i punti di interruzione. Come stai eseguendo i test e come stai collegando il debugger? –

+0

@FrankSchwieterman Le proprietà di debug del mio progetto hanno un'azione di avvio che punta a nunit-console.exe e arg di riga di comando contenenti gli argomenti di nunit. Sto impostando i breakpoint quindi selezionando Debug in solution explorer per i test csproj. Il debugger viene eseguito e lo stato del punto di interruzione cambia con l'errore "i simboli non possono essere caricati" – simonc

+0

hmm non suona come lo studio visivo è collegato al processo che esegue i test (sarà collegato a qualsiasi applicazione per cui è stato premuto f5, sebbene quell'app abbia una fase di compilazione per avviare NUNit) –

risposta

21

Il problema è che, a meno che non lo dici diversamente, NUnit genererà un sottoprocesso per eseguire i test quando lo riterrà necessario. Se lo guardi in Process Explorer, puoi vedere che "nunit-console.exe" * genera "nunit-agent.exe" *. Il debugger di Visual Studio non si collega automaticamente ai processi figli.

In questo caso, credo che la mancata corrispondenza della versione sia il motivo per cui sceglie di avviare un sottoprocesso. Il modo più semplice per ovviare a questo problema è modificare "nunit-console.exe.config" * per modificare il set di valori <supportedRuntime>. Ci dovrebbe essere già un commento lì che segna la linea che si dovrebbe lasciare un commento, al fine di costringerlo a correre come .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 volta modificata che, il primo processo NUnit sarà già .NET 4.0 e non dovrebbe essere necessario generare un sottoprocesso. Se si vuole essere sicuri, specificare /process=Single e NUnit verrà eseguito in un singolo processo o fallirà immediatamente se non è possibile.

* - Se è necessario utilizzare le versioni x86, sostituto:

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

Grazie, questo ha fatto il trucco – simonc

+0

Fantastico, grazie. Avevo visto che dovevi aggiungere gli elementi supportedRuntime, che non avevano funzionato. Non avevo notato che stavo usando la versione x86 e che aveva il suo proprio file di configurazione. – neminem

+0

come su /framework:net-4.0? – bmargulies

1

Il resharper consente di eseguire i test dell'unità durante il debug. Ma non penso che tu possa fare lo stesso con Visual Studio. Prova a installare la versione di prova di Resharper e prova a eseguire il debug dei test.

+0

Anche a volte il resharper non funziona bene: quando si tenta di eseguire un singolo passaggio, si passa direttamente al prossimo punto di interruzione. Alcune volte succede. Non so perché =) –

+0

Grazie, funziona bene. Sono sicuro che ero abituato a farlo anche con Visual Studio, ma funziona anche con ReSharper! – simonc

+0

Se si desidera utilizzare Visual Studio senza Resharper, sarà meglio se si utilizza MSTest anziché NUnit. Le differenze nella sintassi sono piuttosto ridotte. – gprasant

1

Sono sicuro riguardo all'applicazione console, ma dovresti trovare che è possibile avviare manualmente la versione GUI di NUnit e quindi collegarlo al processo nunit-agent dal debugger in Visual Studio.

+0

Grazie, sai se questo è ancora disponibile in nunit 2.6? Riesco a vedere il codice per nunit-gui ma non riesco a vedere un exe nei binari precompilati – simonc

+1

* nunit.exe * è la versione della GUI. * nunit-console.exe * è la versione della console. Eseguendo nunit.exe verrà generato il processo nunit-agent. –

2

Un'altra opzione è utilizzare http://testdriven.net/ per eseguire i test tramite Visual Studio, è possibile inserire un punto di interruzione su un test & fare clic con il pulsante destro del mouse -> Esegui test -> con debugger.

3

Nel caso in cui è utile a qualcuno So che questo è di 4 anni, ma ho seguito le risposte qui e sono stati utili. Anche se la mia risposta è per un'altra versione completa di NUnit tuttavia per qualcuno come me che sta scoprendo questo ho installato NUnit e NUnit Console tramite Gestisci pacchetti NuGet ... (1a e 3a opzione nella schermata) enter image description here e così configurato le mie proprietà del progetto di test Scheda Debug (vedi la prossima schermata di seguito) in VS2015 Community edition per eseguire nunit3-console.exe che si trova nella cartella \ packages che viene creata automaticamente quando si installa "NUnit Console" e per gli argomenti che ho aggiunto prova libreria dll e la riga di comando passa --wait (che richiede allo sviluppatore di "Premere qualsiasi tasto per chiudere" in modo da consentire di vedere il risultato), e ancora più importante - processo che collega automaticamente il codice .NET della libreria di prova in modo che i punti di interruzione sono colpiti

enter image description here

Nota Per eseguire la console app NUnit3 si imposta il progetto di test come il progetto di avvio.

+0

Esattamente quello che volevo Grazie – user515867

Problemi correlati