Frage

Ich schreibe Unit-Tests mit NUnit und dem TestDriven.NET Plugin. Ich möchte Parameter ein Testverfahren wie folgt liefern:

[TestFixture]
public class MyTests
{
    [Test]
    public void TestLogin(string userName, string password)
    {
        // ...
    }

    ...
}

Wie Sie sehen können, sind diese Parameter private Daten, so will ich nicht zu hart Code sie oder sie in einer Datei speichern,. Eigentlich will ich nicht, sie schreiben irgendwo , möchte ich jedes Mal, wenn ich den Test ausführen aufgefordert werden.

Wenn ich versuche, diesen Test auszuführen, erhalte ich die folgende Meldung im Ausgabefenster:

  

Testcase 'MyProject.MyTests.TestLogin' nicht ausgeführt: keine Argumente wurden zur Verfügung gestellt

Also meine Frage ist, wie stelle ich diese Parameter? Ich erwartete TestDriven.NET eine Aufforderung so anzuzeigen, dass ich die Werte eingeben kann, aber es hat nicht ...

Sorry, wenn meine Frage dumm scheint, ist die Antwort wahrscheinlich sehr einfach, aber ich kann nichts nützlich bei Google finden ...


EDIT: Ich habe gerade einen Weg, es zu tun, aber es ist ein schmutziger Trick ...

    [Test, TestCaseSource("PromptCredentials")]
    public void TestLogin(string userName, string password)
    {
        // ...
    }

    static object[] PromptCredentials
    {
        get
        {
            string userName = Interaction.InputBox("Enter user name", "Test parameters", "", -1, -1);
            string password = Interaction.InputBox("Enter password", "Test parameters", "", -1, -1);
            return new object[]
            {
                new object[] { userName, password }
            };
        }
    }

Ich bin immer noch daran interessiert, eine bessere Lösung ...

War es hilfreich?

Lösung

Unit-Tests sollten in der Regel keine Parameter übernehmen. Sie erstellen die notwendigen Daten im Test selbst.

  • Der erwartete Wert
  • Sie rufen Ihre Methode Sie wollen Test bestanden die notwendigen Argumente
  • Sie vergleichen das Ergebnis mit dem erwarteten Wert und dem zurückgegebenen Wert von Ihrer getesteten Methode

MS Unit-Tests erlauben nicht die Weitergabe von Parametern an Tests. Stattdessen müssen Sie Datadriven Einheit schaffen, prüft . Versuchen Sie, den Link, es kann Ihnen helfen.

erwähnt Wie ich. Ich würde erklären, keine Argumente zu Unit-Tests vorbei selbst gute Praxis.


Update: Ich war jung :). Betrachten Sarfraz Antwort stattdessen auf, wie Parameter zu NUnit Tests bestehen.

Andere Tipps

Mit dem Testcase Attribut.

[TestCase("User1", "")]
[TestCase("", "Pass123")]
[TestCase("xxxxxx", "xxxxxx")]
public void TestLogin(string userName, string password)
{
    // ...
}

ich glaube, Sie dieses Problem mithilfe des RowTest Plugin lösen kann für NUnit hier http://www.andreas-schlapsi.com/2008/01/29/rowtest-extension-120/

Sie können einfach erstellen-Data Driven Tests, bei denen die Testdaten bereitgestellt wird durch [Row] Attribute. So, hier ist ein Beispiel für einen Test, der überfahren wird und immer wieder mit unterschiedlichen Parametern:

[TestFixture]
public class RowTestSample
{
 [RowTest]
 [Row( 1000, 10, 100.0000)]
 [Row(-1000, 10, -100.0000)]
 [Row( 1000, 7, 142.85715)]
 [Row( 1000, 0.00001, 100000000)]
 [Row(4195835, 3145729, 1.3338196)]
 public void DivisionTest(double numerator, double denominator, double result)
 {
    Assert.AreEqual(result, numerator / denominator, 0.00001);
 }
} 

Ich stimme mit den anderen Antworten, die Übergabe von Argumenten nicht best practice, aber weder hart Codierung Anmeldeinformationen oder Server-Adressen, die zu einem bestimmten Zeitpunkt ändern können.

Angeregt durch die vorgeschlagene Lösung in Frage, habe ich einfach Konsole Eingang lesen stattdessen Eingabefelder zu verwenden. Die Argumente werden in einer Datei gespeichert. Beim Starten eines Tests wird die Datei umgeleitet und von einer Initialisierungsfunktion gelesen werden, die aufgerufen werden sollen, bevor Testfälle ausgeführt werden.

nunit tests.dll < test.config

Dies vermeidet Interaktion Benutzer und sollte von jedem Automatisierungsskript runnable sein. Nachteil ist, dass das Passwort noch irgendwo sein muss gespeichert werden, aber zumindest kann es lokal auf dem Tester Maschine und ist einfach zu ändern gespeichert werden.

Dies war für ein Projekt, in dem Excel-Sheets, die Tests, die (nicht Unit-Tests per Definition) wurden verwendet, um andere zu schaffen Testfälle für eine größere Serverseite Projekt zu lassen, ohne Code zu ändern. Es wäre schlimm gewesen, wenn alle Testfälle in einem einzigen riesigen Excel-Blatt gezwungen werden mußten. Auch gab es keine CI, nur viele Testumgebungen auf verschiedenen Servern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top