12 Stimmen

Wie kann man einen NUnit-Test am besten debuggen?

Meine Plattform: Visual C# 2008 Express Edition mit NUnit 2.2.7

Ich habe eine Lösung mit meinem Code in einem Projekt und meine NUnit-Unit-Tests in einem anderen Projekt in der gleichen Lösung.

Ich habe hart zu debuggen und Single-Step durch die NUnit-Tests gekämpft. Ich fand einige Referenzen online, die vorgeschlagen, die folgenden aufrufen:

NUnit.ConsoleRunner.Runner.Main(args);

Aber das lässt sich nicht einmal kompilieren - es gibt einen Compilerfehler:

Fehler 1 Der Typ- oder Namespace-Name 'Runner' existiert nicht im Namespace 'NUnit.ConsoleRunner' (sind fehlt eine Assembly-Referenz?)

Ich habe alle Baugruppenreferenzen hinzugefügt, die ich finden konnte, ohne Erfolg.

Schließlich ist das, was ich zusammengehackt habe und es funktioniert, aber vielleicht können Sie gute Leser eine bessere Lösung vorschlagen:

1) In meinem Testprojekt lautet der Klassenname eines Testfalls, den ich debuggen möchte, MyTestClass. Sie hat eine [TestFixtureSetUp]-Methode namens Init() und der eigentliche Testfall befindet sich in der [Test]-Funktion MyTest()

2) In meinem Codeprojekt habe ich ein Konsolenprogramm TestProgram.cs, das zu einer EXE kompiliert wird.

In TestProgram.cs rufe ich die Testfälle auf folgende Weise auf

// First instantiate the test class
MyTestClass tc = new MyTestClass();

// Call the TestFixtureSetup method
tc.Init();

// Now call the actual test
tc.MyTest();

Das funktioniert, und ich kann die Testfälle debuggen und in Einzelschritten durchgehen.

Wenn jemand bessere Vorschläge für die Verwendung von Visual Studio 2008 Express hat ohne für zusätzliche Plugins zu bezahlen Ich weiß Ihren Rat zu schätzen.

0 Stimmen

Im Allgemeinen sollten Sie keinen Debugger verwenden müssen, wenn Sie es richtig und in kleinen Schritten machen. Aber Sie sind vielleicht in einer anderen Situation

3voto

Patrick Desjardins Punkte 130529

Jon als ein guter Weg, aber nicht der automatischere ;)

Hier ist, was ich sagen bereits auf SO :

Sie können ein leeres Projekt erstellen (z. B. eine Konsolenanwendung) und in den Eigenschaften des Projekts das DEBUG-Tag und die Option Start External Program . Geben Sie den Pfad von Nunit ein. Dann, in der Startoption, die Befehlszeilenargumente wählen Sie die DLL, die alle Ihre Test enthalten (meine ist immer in der nunit \bin... ). Wählen Sie dann Enable unmanaged code debugging und Sie werden in der Lage sein, das Projekt in VS zu starten und sogar den Debugger Schritt für Schritt zu verwenden.

Auf diese Weise brauchen Sie nicht jedes Mal ein Makro oder etwas anderes zu machen, es ist einfach ein normales F5 :)

3 Stimmen

Brauchen Sie überhaupt ein eigenes Projekt? Können Sie diese Optionen nicht einfach in Ihrem Unit-Test-Projekt einstellen?

0 Stimmen

Kent hat recht. (Es sei denn, die Express Edition erlaubt es nicht, ein externes Programm zu starten, wenn Sie F5 drücken)

1 Stimmen

In Visual C# 2010 Express können Sie "Externes Programm starten" nicht verwenden. Von msdn.microsoft.com/de-us/library/68c8335t.aspx "Die Express-Editionen, wie z. B. Microsoft Visual C# Express, unterstützen das Ändern der StartAction-Eigenschaft nicht; dies wird nur von der Vollversion von Visual Studio unterstützt."

2voto

Kent Boogaart Punkte 170094

Da Sie eine Express-Version von Visual Studio verwenden, können Sie das kostenlose TestDriven.NET-Add-In nicht nutzen. Das ist bedauerlich, denn das ist wirklich das beste Tool, das ich zum Debuggen von Unit-Tests verwendet habe.

El Runner Klasse befindet sich in der nunit-console-runner.dll Baugruppe, also fügen Sie unbedingt einen Verweis darauf hinzu. Ich bin mir nicht sicher, ob es etwas gibt, was Ihr einfacher Einstiegspunkt nicht tut, aber es ist wahrscheinlich am besten, ihn zu verwenden, um sicher zu sein und für zukünftige Kompatibilität.

Eine weitere erwähnenswerte (schmutzige) Option besteht darin, dass Ihr Einheitstest Folgendes aufruft Debugger.Attach() . Ich habe dies nicht mit einer Express-Installation ausprobiert, aber Sie sollten aufgefordert werden, einen Debugger anzuhängen, wenn Ihr Unit-Test läuft. Sie können dann Ihre vorhandene VS-Instanz auswählen und mit dieser debuggen.

1 Stimmen

Haben Sie den Test Runner von ReSharper verwendet? Ich finde ihn viel besser als TestDriven.NET - obwohl er natürlich nicht kostenlos ist.

0 Stimmen

Hi Jon, Ja, das habe ich und ich stimme zu, dass es ein schöner Läufer ist. Allerdings bin ich nicht ein Fan von ReSharper aufgrund seiner Ressourcenanforderungen. Ich versuchte es für einen erheblichen Zeitraum (> 3 Monate) und fand es verursacht mir eine Menge Schmerzen.

2voto

BlackWasp Punkte 4855

Werfen Sie einen Blick auf http://nunit.com/blogs/?p=28

Das funktioniert sehr gut.

0 Stimmen

Danke BlackWasp. Dieser Link befasst sich mit dem Problem, dass die kostenpflichtigen Editionen die Option "Externes Programm starten" haben, während die Express-Editionen dies nicht haben.

1 Stimmen

Kann jemand diese Webseite wiederherstellen? Ich würde sie wirklich gerne lesen, aber die URL ist ungültig geworden...

0voto

David Schmitt Punkte 56455

In meinem Geschäft machen wir es genau so wie Sie. Auf der anderen Seite bedeutet das, dass die Einrichtung möglicherweise nicht genau so ist, wie NUnit es macht. Auf der anderen Seite ist es recht einfach zu machen und erlaubt es, eine minimale Umgebung zu schaffen, um den Fehler zu reproduzieren.

0voto

Gishu Punkte 130442

Ich habe online einige Hinweise gefunden, die vorgeschlagen, die folgenden Stellen anzurufen: NUnit.ConsoleRunner.Runner.Main(args); Aber das lässt sich nicht einmal kompilieren - es hat den Compiler-Fehler:

JFYI Sie müssen eine .NET DLL-Referenz zu nunit-console-runner Assembly im NUnit DLL-Bundle (ich habe 2.2.4.0) Scheint, wie die Klasse auch umbenannt wurde, aber es gibt, wenn Sie es brauchen.

NUnit.ConsoleRunner.ConsoleUi.Main(args);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X