2010-06-08 8 views
9

Ich habe eine Reihe von Komponententests in VS2010 Express geschrieben und Tests, die manchmal fehlschlagen. Da die Express-Editionen von VS Plugins nicht laufen lassen, kann ich nicht einfach TestDriven.Net oder ein Äquivalent hochfahren und die Tests debuggen. Um zu versuchen und zu arbeiten, um dieses Ich habe meine Testanordnung in eine Konsolenanwendung umgesetzt und das Hauptverfahren sieht wie folgt aus:Debugging von NUIT-Tests in 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 der Theorie sollte ich in der Lage sein, dies zu laufen, stellen Sollbruchstellen in meinem Test . Wenn es funktionierte, es wäre um eine akzeptable Arbeit sein, aber ich halte das folgende bekommen:

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) 

Nun ist die Datei vorhanden ist und wenn manuell ausführen nunit-Konsole läuft gut. Was könnte mein Problem sein?

+0

Warum verbinden Sie nicht einfach mit NUnit GUI Runner? –

+1

In Visual Studio Express können Sie "Anfügen an Prozess" nicht ausführen. – user181813

Antwort

6

Ich spielte mit Ihrem Konzept und es scheint, dass das Problem nicht direkt aus dem Laden der Datei, sondern aus Abhängigkeiten.

ich verwendet, um die folgenden geänderten Code:

Und der Fehler war tatsächlich ein Fehler nunit.core.dll, die im Verzeichnis/lib ist zu finden.

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); 
     } 

(Ich mag immer System.Reflection.AssemblyName weil Sie Vers des RAW-Datei-Pfad, um die, dass alles inspizieren und sehen können.)

Ein schneller Bulk-Copy (xcopy nunit. *. Dll) in das Debug-Verzeichnis meines Testprojekts und es lief gut. (Es sollte trivial sein, die minimalen Abhängigkeiten zu finden)

Getestet in VC# 2010 Express mit NUnit 2.5.7 (Breakpoints funktionieren, aber ich habe nicht wirklich mit anderen Optionen gespielt.) Obwohl ich mir sicher bin könnte daraus eine passable Build-Option machen.

Prost!

PS - Erste Post hier, also bin ich ein bisschen ungeprüft, wie die "Code" Blöcke formatiert bekommen. Leider im Voraus ..

7

Grundsätzlich müssen Sie die Assembly konvertieren, um Windows-Anwendung Forms, fügen Sie Verweis auf die nunit-gui-runner.dll Montage und Ihre Main-Methode wie folgt aussehen ändern:

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

hier ist ein weiteres Beispiel:

... 
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" }); 
     } 
    } 
} 

Dies ermöglicht es Ihnen, in bestimmte Tests zu Schritt aber für einen rot-grün-Zyklus ist nicht sehr gut, so dass Sie diese nur nutzen wollen beim Debuggen und nicht in anderen Umständen.

+0

Wenn Sie jemals einen Laufzeitfehler in einem neuen Projekt erhalten, überprüfen Sie, ob Main als [STAThread] ausgeführt wird. Wenn nicht, kann die NUnit GUI nicht geladen werden. – Johannes

+0

Das ist großartig. Unsere Zeile liest sich wie folgt: 'NUnit.Gui.AppEntry.Main (new string [] {@" Test.exe ","/run "});', um die Hardcodierung eines Pfades zu vermeiden (NUnit sieht es sowieso), plus läuft es automatisch wenn es lädt. – javs

+0

404 auf dem Blogpost – cod3monk3y

2

Ich hatte ein ähnliches Problem beim Debuggen von Unit Tests in VS C# Express. Hatte eine harte Zeit, es richtig zu funktionieren, aber dann habe ich von dieser Projektvorlage erfahren. Funktioniert perfekt in C# Express!

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

C# Projektvorlage

Integrierte Tests mit Visual Studio, einschließlich Visual C# Express Version

Selbst NUnit Konsole Läufer enthalten. Erlauben, Test Fixtures und Test zu schreiben, von Visual Studio aus, indem Sie einfach F5 (Unterstützung Test Debugging) oder Ctrl-F5 freien Lauf mit Ergebnissen im Konsolenfenster. In Fall des Testfehlers durch Piepton anzeigen.

Enthält wesentliche NUnit-Module, um das Testprojekt zu starten. Keine externen Abhängigkeiten. Erstellen Sie einfach ein neues Projekt mit der NUnit Test Application Vorlage.