2016-05-24 19 views
0

Ich versuche, in C# geschriebene Nunit-Testfälle mit einem Konsolenprogramm auszuführen. Bis jetzt habe ich verschiedene Möglichkeiten ausprobiert, aber ich war nicht in der Lage, einen perfekten Weg zu finden, um das Gleiche zu erreichen.Ausführen von Nunit-Tests in C# und Erfassen der Ausführungsprotokolle

Vorgehensweise 1: Verwenden des NUnitTestAdapter-Pakets. Dieses Paket ist älter und kann den Test, der mit der neuesten Version von Nunit Version 3.2.1 erstellt wurde, nicht ausführen. Aber seine Arbeit gut mit älteren Versionen wie 2.6.4

Added NUnitTestAdapter Paket zur Lösung versucht dann den Code unten

CoreExtensions.Host.InitializeService(); 
     TestSuiteBuilder builder = new TestSuiteBuilder(); 
     TestPackage testPackage = new TestPackage(@"path to dll"); 
     RemoteTestRunner remoteTestRunner = new RemoteTestRunner(); 
     remoteTestRunner.Load(testPackage); 
     TestSuite suite = builder.Build(testPackage); 
     TestSuite test = suite.Tests[0] as TestSuite; 
     var numberOfTests = ((TestFixture)test.Tests[0]).TestCount; 
     int i = 0; 
     foreach (TestMethod t in ((TestFixture)test.Tests[0]).Tests) 
     { 
      Console.WriteLine(t.TestName.Name); 
      //TestName testName = ((TestMethod)((TestFixture)test.Tests[0]).Tests[i]).TestName; 
      TestFilter filter = new NameFilter(t.TestName); 
      TestResult result = test.Run(new NullListener(), filter); 
      ResultSummarizer summ = new ResultSummarizer(result); 
      NUnit.Core.NUnitFramework.Assert.AreEqual(1, summ.ResultCount); 
      i++; 
     } 

Kann ich jede aktualisierte Version dieser erhalten dann dies wird eine feine Lösung.

Ansatz 2: Mit Nunit3-Konsole

Added der Verweis auf mein Projekt nunit3.console.exe und versuchte, mit folgenden Code

string path = @"path to dll"; 
NUnit.ConsoleRunner.Program.Main(new[] { path }); 

dies ein Fehler wirft sagen: „Entweder Assembly enthält keine Tests oder richtiger Test-Treiber wurde nicht gefunden "

Kann mir jemand sagen, wie können wir die Tests mit Ausführungsprotokoll ausführen?

Antwort

1

So soll NUnit nicht funktionieren.

Im ersten Beispiel verwenden Sie interne Klassen und Methoden von NUnit 2.x, die nicht zur allgemeinen Verwendung dokumentiert sind. Sie werden zufällig als öffentlich deklariert, weil dies in der Vergangenheit für alle Methoden, die durch unsere eigenen Tests aufgerufen werden, üblich war. Außerdem macht die Verwendung des NUnit-Testadapters keinen Sinn, da dieses Paket zum Verbinden von NUnit mit dem Visual Studio-Testfenster verwendet werden soll. Ich vermute, dass es für Sie funktioniert, weil es die nunit.core-Assembly einzieht, die Sie tatsächlich verwenden.

Im zweiten Beispiel rufen Sie das Haupt direkt auf. Du hast bereits eine Nunit-Ausgabe gepostet, die nicht funktioniert, also werde ich nicht ins Detail gehen. Ich werde nur sagen, dass das Ausführen eines eigenständigen Programms durch Referenzieren und Aufrufen des Hauptprogramms nur in den einfachsten Fällen funktioniert. Für ein Programm wie den Konsolen-Runner, der verschiedene Assemblies dynamisch lädt, wird es nicht unbedingt funktionieren.

NUnit 3 bietet eine veröffentlichte API zum Ausführen von Tests. Das haben uns die Leute seit vielen Jahren gefragt. Es ist endlich da! Warum nicht benutzen? Überprüfen Sie die Dokumentation zu Nunit 3, um Informationen zur Test Engine und ihrer API zu erhalten. Wenn Sie Tests aus irgendeinem Grund programmatisch ausführen möchten, ist dies heutzutage der richtige Weg.

Natürlich können Sie weiter versuchen, den Ansatz, den Sie genommen haben, zu arbeiten, und ich werde kommentieren, wenn nötig. Ich möchte nur für Leute, die diesen Beitrag in der Zukunft finden, klar machen, dass NUNit nicht so verwendet werden soll.

+0

Danke für Ihre Erklärung Charlie, ich habe so viele Beiträge gelesen, um nunit Tests programmatisch auszuführen, und ich könnte einen älteren Weg nehmen, sie auszuführen. Ich werde die Dokumente weiterleiten, wie Sie in der Antwort erwähnt haben. – user3625533

+0

Ich denke, Sie beziehen sich auf [diese] (https://github.com/nunit/docs/wiki/Test-Engine-API-Spec) ApI. Ist es eine stabile Version? Ich kann sehen, dass es einen Kommentar auf der Oberseite gibt, der sagt "Änderungen vorbehalten". – user3625533

+0

Die API hat jetzt vier Versionen durchlaufen: 3.0, 3.0.1, 3.2 und 3.2.1. Wir haben hinzugefügt, aber nichts entfernt. – Charlie