wake-up-neo.com

So debuggen Sie den Nunit-Test in Visual Studio 2010

Ich habe ein Problem beim Debuggen eines NUnit-Tests von VisualStudio. Ich erstellte ein leeres Projekt (Konsolenanwendung), fügte dann Verweise auf die NUnit-Bibliothek hinzu und schrieb einen einfachen Test.

namespace ReimplementingLinq.Tests
{
    [TestFixture]
    public class WhereTest
    {
        [Test]
        public void SimpleFiltering()
        {
            int[] source = { 1, 2, 3, 4, 2, 8, 1 };
            var result = source.Where(val => val < 4);
            int[] expected = {1,2,3,4};
            CollectionAssert.AreEqual(expected, result);
        }
    }
}

Als Nächstes folgte ich den Ratschlägen in diesem Link Wie führe ich NUnit im Debug-Modus von Visual Studio aus? aber keine der Lösungen in diesem Thema funktioniert für mich. Während des Tests werden keine meiner Haltepunkte getroffen. Ich habe versucht, die Lösung zu testen, indem ich sie an den Prozess anfügte und das Projekt mit einem externen Programm mit Argumenten ausführte. 

Was kann ich tun, um meinen Gerätetest zu debuggen?

20
commando

Angenommen, Sie verwenden eine andere Version von Visual Studio als Express Edition, dann könnte TestDriven.NET von Nutzen sein.

Nach der Installation

  1. Legen Sie einen Haltepunkt innerhalb Ihrer Testmethode fest
  2. Klicken Sie mit der rechten Maustaste und wählen Sie Debugger aus dem Menü Test With
  3. Der Debugger sollte starten und Ihren Haltepunkt erreichen

Leider können Sie diese Methode nicht mit Express-Editionen von Visual Studio verwenden, da TestDriven.NET ein Plugin für Visual Studio ist und die Express-Editionen die Verwendung von Plug-Ins nicht unterstützen

Einen Test innerhalb einer Konsolen-App ausführen

Sie können einen Test auch über eine Konsolenanwendung im Debugger ausführen:

  1. Erstellen Sie eine neue Konsolenanwendung
  2. Verweisen Sie auf Ihr Unit-Test-Projekt
  3. Erstellen Sie in der Main-Methode der Konsolenanwendung eine neue Instanz Ihrer Testfixuture und rufen Sie dann eine der Testmethoden auf. Wenn ich zum Beispiel ein Fixture namens MyTests und einen Test namens Test1 habe, würde ich schreiben:

    var myTests = new MyTests();
    myTests.Test1();
    
  4. Setzen Sie einen Haltepunkt in der Zeile, in der Sie eine Instanz der MyTests-Klasse erstellen, und drücken Sie F5

  5. Der Debugger trifft Ihren Haltepunkt und Sie können dann mit F11 in den Konstruktor Ihres TestFixture oder in den Test selbst hineingehen
13
Crippledsmurf

Ausführen oder Debuggen von NUnit-Tests direkt mit Visual Studio

Schau ma 'keine Erweiterungen!

Konfigurieren Sie einfach Ihr Testprojekt so, dass beim Drücken von F5 (Debugging starten) oder Strg-F5 (Start ohne Debuggen) automatisch NUnit GUI startet und alle darin enthaltenen Tests ausführt. Wenn irgendwelche Haltepunkte erreicht werden, können Sie auch einfach Ihren Testcode debuggen.

Eine Schritt-für-Schritt-Anleitung mit Bildern zeigt Ihnen genau, wie es geht.

Faulheit ist die Mutter aller Erfindungen :-)

41
Robert Koritnik

Wenn Sie NUnit 2.4 verwenden, können Sie den folgenden Code in Ihre SetUpFixture -Klasse einfügen. (Sie können dies mit älteren Versionen tun, aber Sie müssen das Äquivalent der SetUpFixture tun oder es in den Test selbst kopieren.)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

Was Debugger.Launch() bewirkt, wird das folgende Dialogfeld angezeigt, wenn Sie auf In NUnit ausführen klicken.

JIT Debugger Dialog

Sie wählen dann Ihre laufende Instanz von Visual Studio aus, während Ihr Projekt geöffnet ist (das zweite in meinem Screenshot). Der Debugger wird dann angehängt und alle Haltepunkte oder Ausnahmen werden in Visual Studio angezeigt.

5

Schauen Sie sich NHarness über CodePlex an. 

Es handelt sich um eine sehr einfache, reflexionsbasierte Testläufer-Bibliothek, die NUnit-Attribute erkennt und von einem Projekt in Visual Studio Express aus ausgeführt werden kann, um Debug-Tests zu ermöglichen.

Es verfügt derzeit über eine Granularität auf Testklassenebene, aber Aufrufe auf Methodenebene werden vermutlich bald hinzugefügt.

0
johnc

Hatte das gleiche Problem mit NUnit 2.5.3 und fand schließlich eine andere Lösung. Sehen Sie, ob dies für Sie funktioniert:

Öffnen Sie die NUnit-GUI und rufen Sie das Menü Einstellungen ... auf. Wählen Sie im Einstellungsbaum den Unterabschnitt Assembly Isolation des Test Loader-Abschnitts aus. Legen Sie das Standardprozessmodell so fest, dass Tests im NUnit-Prozess direkt ausgeführt werden.

Ich hatte es so eingestellt, dass Tests in einem einzelnen separaten Prozess ausgeführt werden. Aus diesem Grund konnte der Debugger meine zu testende DLL nicht mit den Symbolen für das Debuggen verknüpfen. Ich verwende noch immer eine eigene AppDomain pro Assembly für meine Standarddomänenverwendung.

0
James