2010-05-27 15 views
12

Ich habe eine Test-Suite in NUnit erstellt, die mehrere verschiedene Testeinheiten in verschiedenen Baugruppen referenziert.NUnit läuft nicht Suite-Tests

ich ziemlich viel habe den Beispielcode aus NUnit's docs verwendet:

namespace NUnit.Tests 
{ 
    using System; 
    using NUnit.Framework; 
    using System.Collections; 

    public class AllTests 
    { 
     [Suite] 
     public static IEnumerable Suite 
     { 
      get 
      { 
       ArrayList suite = new ArrayList(); 
       suite.Add(new VisionMap.DotNet.Tests.ManagedInteropTest.DotNetUtilsTest()); 
       return suite; 
      } 
     } 
    } 
} 

Mein Ziel ist es oben so mehrere Tests zur Liste hinzufügen ich sie alle in einem Batch ausgeführt werden können.

Aber wenn ich versuche, die DLL in NUnit GUI zu laden ich dieses: alt text

Was mache ich falsch?

Ich bin mir bewusst, dass die Docs sagen, die GUI wird keine Suiten ausführen, aber ich habe die Konsole auch ausprobiert. Kann mir bitte jemand sagen, wofür die Suiten gut sind und wie ich sie nutzen kann, um mein Ziel zu erreichen?

Ich benutze Nunit 2.5.0.9122.

bearbeiten

Nun, keine Antworten erscheint demnächst. Am Ende habe ich eine alternative Lösung gefunden: Kategorien. Ich gruppiere Test-Fixtures, indem ich ihnen geeignete Kategorien gebe, und dann kann ich eine Teilmenge davon im Batch ausführen, während ich immer noch eine andere Teilmenge ignoriere.

Noch, sehr seltsam, dass diese Suite-Funktion scheint komplett gebrochen zu sein.

+0

Ich habe eine Prämie in der Hoffnung, jemand hinzugefügt mich zu erklären, was Suites ist gut für oder wie ich einen Stapel von Tests aus innerhalb weniger Baugruppen ohne alle von ihnen von der Kommandozeile aus erstellen kann. –

+0

Schade, dass das Kopfgeld nicht geholfen hat ... Die einzige Antwort geschrieben kommt nicht nahe, um die Frage zu beantworten. –

+0

Ich verwende immer Kategorien für diese Art von Dingen. Es scheint weiter verbreitet zu sein. –

Antwort

3

Suites sind wirklich für alles, was nicht benötigt viel an all diesen Tagen. Wenn Sie diese nur verwenden möchten, um festzulegen, welche Tests ausgeführt werden und welche nicht, wird dies mit Kategorieattributen besser erreicht. Dies ist, was Sie getan haben, und klingt wie die beste Lösung für Ihr Problem.

Jedoch für andere und zukünftige Referenz, können Sie noch Suites in Nunit verwenden. Sie müssen sie von der Konsole aus ausführen und nur die Option/fixture verwenden. Um zum Beispiel die Suite, die Sie oben angegeben laufen, würden Sie laufen (Klasse unter der Annahme, in eine Assembly AllTests.dll kompiliert wurde):

nunit-console /fixture:AllTests.Suite AllTests.dll 

Sie werden keine Hinweise oder Art und Weise sehen zu laufen Suiten in die GUI - das ist in der Dokumentation vermerkt. Sie können sie jedoch über die Konsole, die in die GUI integriert ist, ausführen, indem Sie Befehle wie oben verwenden.


Ich benutze Suiten in einigen meiner Tests, weil ich einige seltsame Anwendungsfälle, die mich erfordern manchmal ein Argument meiner Testmethoden übergeben müssen. Ich tue dies, indem ich eine Suite wie die folgende erstelle. Es gibt also einige Anwendungen für sie, nur keine in Ihrem Fall.

[Suite] 
    public static IEnumerable MySuite 
    { 
     get 
     { 
      var suite = new ArrayList{new TestClass1(arg1), TestClass2(arg2)}; 
      return suite; 
     } 
    } 
+0

Übrigens, wenn jemand eine bessere Möglichkeit kennt, Argumente zu übergeben/das Verhalten eines Tests während der Laufzeit zu steuern, als das, was ich getan habe, dann bitte kommentieren. Ich habe einige Zeit damit verbracht, Nunit-Dokumente und Mailinglisten zu durchsuchen, und das war das Beste, was ich mir vorstellen konnte! – imoatama

3

Gibt es einen Grund, warum Sie "IEnumerable" anstelle von "TestSuite" zurückgeben?

[Suite] 
public static TestSuite Suite 

aktualisieren

Lesen des Kleingedruckte am unteren Rand der Seite auf NUnit Website, es sieht aus wie Tests Suite Art werden in der Gui Läufer nicht zeigen in, so dass ich denke, das ist die Frage :)

Suites werden derzeit nicht im Gui angezeigt oder werden automatisch von beiden Runnern ausgeführt, wenn sie angetroffen werden. Der historische Zweck des Suite-Mechanismus bestand darin, Tests auf der obersten Ebene jedes Laufs zu aggregieren. Daher werden sie nur unterstützt, wenn sie zusammen mit der Option/fixture in der Konsole oder der GUI-Befehlszeile verwendet werden.

Update 2

Ich bin mir nicht sicher, was Sie mit der „Suite“ -Funktion zu erreichen versuchen, aber wenn Sie eine Möglichkeit zum Konfigurieren eines Satzes von Testanordnungen zu finden versuchen, zu sein zusammen laufen lassen, habe ich "NUnit Test Projects" verwendet, um dies in der Vergangenheit zu tun (es ist nur eine XML-Konfigurationsdatei, die Test-DLLs auflistet). Dies ermöglicht es einem festen Satz von Testanordnung Referenzen konfiguriert werden und dann in die GUI geladen oder von der Konsole Läufer laufen:

http://www.nunit.org/index.php?p=multiAssembly&r=2.5.5

+0

Das ist, was die Docs sagen, dass ich tun sollte: http://www.nunit.org/index.php?p=suite&r=2.4.7 Ich denke, es hat mit der Entkopplung von NUnit-Version aus dem Test selbst zu tun. –

+0

a. Ich verwende nicht die Option/Fixture und, was noch wichtiger ist, b. Wie _am_ sollte ich die Suite betreiben? Ich habe sowohl GUI als auch Konsole ausprobiert .. es funktioniert nicht. –

+0

Danke, ich werde das stattdessen versuchen. Aber um Ihre Frage zu beantworten, ja, das ist es, was ich erreichen möchte, und ich hatte den Eindruck, dass Suites dafür da sind. Wenn nicht, wozu dienen sie? –