2010-06-08 13 views
9

Ho scritto un sacco di test unitari all'interno di VS2010 Express e test sono test che a volte falliscono. Poiché le edizioni Express di VS non consentono l'esecuzione di plug-in, non posso semplicemente eseguire il test su TestDriven.Net o un equivalente e eseguire il debug dei test. Per cercare di aggirare questo ho convertito la mia montaggio di prova in una console app e feci il metodo aspetto principale in questo modo:Debug di test Nunit all'interno di VS2010 Express

class CrappyHackToDebugUnitTestInVSExpress 
{ 
    public static void Main() 
    { 
    AppDomain.CurrentDomain.ExecuteAssemblyByName(
      @"C:\Program Files\NUnit 2.5.5\bin\net-2.0\nunit-console.exe", 
      new [] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" }); 
    } 
} 

In teoria dovrei essere in grado di eseguire questa funzione, punti di interruzione impostati nel mio test . Se ha funzionato sarebbe un lavoro accettabile, in giro, ma continuo a ricevere il seguente: esiste

FileLoadException 
Could not load file or assembly 'C:\\Program Files\\NUnit 2.5.5\\bin\\net-2.0\\nunit-console.exe' 
or one of its dependencies. The given assembly name or codebase was invalid. 
(Exception from HRESULT: 0x80131047) 

Ora il file e quando eseguire manualmente NUnit-console funziona benissimo. Quale potrebbe essere il mio problema?

+0

Perché non si collega al corridore GUI NUnit? –

+1

Non è possibile eseguire "allegare al processo" in Visual Studio Express. – user181813

risposta

6

Ho giocato con il tuo concetto e sembra che il problema non sia direttamente dal caricamento del file, ma dalle dipendenze.

ho usato il seguente codice modificato:

e l'errore era in realtà un fallimento per individuare nunit.core.dll, che si trova nella directory/lib.

try 
     { 
      String NUnitPath = @"C:\Program Files\NUnit 2.5.7\bin\net-2.0\nunit-console.exe"; 

      AssemblyName asmName = System.Reflection.AssemblyName.GetAssemblyName(NUnitPath); 

      AppDomain.CurrentDomain.ExecuteAssemblyByName(asmName, new[] { Assembly.GetExecutingAssembly().Location, "/framework:4.0" }); 

     } 
     catch (Exception ex) 
     { 
      Trace.WriteLine(ex.Message); 
      Trace.WriteLine(ex.StackTrace); 
     } 

(mi piace sempre System.Reflection.AssemblyName perché si può controllare e vedere che tutto è in ordine versi il percorso del file RAW.)

Una copia di massa veloce (xcopy NUnit. *. Dll) in la directory di debug dei miei progetti di test e funzionava bene. (Dovrebbe essere banale scoprire le dipendenze minime richieste)

Testato in VC# 2010 Express con NUnit 2.5.7 (i punti di interruzione funzionano, ma in realtà non ho giocato con altre opzioni.) Anche se sono sicuro che tu potrebbe fare una opzione di compilazione passabile da esso.

Cheers!

PS - Primo post qui quindi sono un po 'non testato per ottenere i blocchi di' codice 'formattati. Spiacente in anticipo ..

7

Fondamentalmente è necessario convertire il montaggio a Windows Form app, aggiungere il riferimento alla NUnit-gui-runner.dll montaggio e cambiare il metodo principale per assomigliare a questo:

[STAThread] 
    static void Main() 
    { 
     NUnit.Gui.AppEntry.Main(new string[] { Assembly.GetExecutingAssembly().Location }); 
    } 

ecco un altro esempio:

... 
using NUnit.Gui; 

namespace __libs 
{ 
    class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      NUnit.Gui.AppEntry.Main(new string[] { @"C:\test\bin\Debug\test.exe" }); 
     } 
    } 
} 

questo vi permetterà di entrare in alcuni test, ma non è molto buono per un ciclo di verde rosso, così si vuole utilizzare questo solo quando il debug e non in altre circostanze.

+0

Se si verifica un errore di runtime in un nuovo progetto, controllare se Main è in esecuzione come [STAThread]. In caso contrario, la GUI NUnit non può essere caricata. – Johannes

+0

Questo è fantastico. La nostra riga si legge come la seguente: NUnit.Gui.AppEntry.Main (nuova stringa [] {@ "Test.exe", "/ run"}); ', per evitare di codificare un percorso (NUnit lo vedrà comunque), più eseguendolo automaticamente quando viene caricato. – javs

+0

404 sul post del blog – cod3monk3y

2

Ho avuto un problema simile cercando di eseguire il debug dei test di unità in VS C# express. Ho avuto difficoltà a farlo funzionare correttamente, ma poi ho scoperto questo modello di progetto. Funziona perfettamente in C# Express!

http://visualstudiogallery.msdn.microsoft.com/b8a7a8fa-9f5a-4b9b-8e8b-8839a4364f26?SRC=VSIDE

C# modello di progetto

test integrato con Visual Studio, tra cui Visual C# Express versione

Autonomo NUnit console corridore. Permetti di scrivere test fixture e test , eseguendo da Visual Studio semplicemente premendo F5 (test di supporto debug), o Ctrl-F5 esecuzione libera con risultati nella finestra della console. Nel caso , l'errore del test viene indicato dal segnale acustico.

Contiene moduli NUnit essenziali per avviare il progetto di test. Nessuna dipendenza esterna . Basta creare un nuovo progetto, usando il modello NUnit Test Application .