Wie kann ich angeben test method Parameter mit TestDriven.NET?
Schreibe ich unit-tests mit NUnit und die TestDriven.NET plugin. Ich möchte die Parameter einer test-Methode wie diese :
[TestFixture]
public class MyTests
{
[Test]
public void TestLogin(string userName, string password)
{
//...
}
...
}
Wie Sie sehen können, diese Parameter sind private Daten, so will ich nicht zu hard-code oder Sie in eine Datei. Eigentlich möchte ich nicht zu schreiben, Sie überall, ich will Sie dazu aufgefordert werden jedes mal, wenn ich den test ausführen.
Wenn ich versuche, diesen test ausführen, bekomme ich folgende Meldung im output-Fenster :
TestCase " MyProject.MyTests.TestLogin' nicht ausgeführt werden: Keine Argumente geliefert wurden
Also meine Frage ist, wie kann ich diese Parameter ? Ich erwartete TestDriven.NET um eine Eingabeaufforderung angezeigt, so dass ich die Werte eingeben, aber es hat nicht...
Sorry, wenn meine Frage scheint dumm, die Antwort ist wahrscheinlich sehr einfach, aber ich konnte nicht finden, etwas nützliches auf Google...
EDIT: ich habe gerade einen Weg gefunden, 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 interessiert an einer besseren Lösung.
Du hast absolut Recht. Jedoch, es ist ein kleines community-Projekt, also CI ist nicht wirklich ein Problem, zumindest für jetzt.
InformationsquelleAutor Thomas Levesque | 2009-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unit-Tests sollten in der Regel keine Parameter.legen Sie die notwendigen Daten in den test selbst.MS Unit-tests erlauben nicht die übergabe von Parametern zu übergeben. Stattdessen müssen Sie erstellen Von datengesteuerten Komponententests. Versuchen Sie den link, vielleicht hilft es Euch.
Wie ich bereits erwähnt habe. Ich würde das nicht erklären, übergeben von Argumenten an unit-tests selbst eine gute Praxis.Update: ich jung war :). Betrachten Sie Sarfraz Antwort statt, wie zum übergeben von Parametern an NUnit-tests.
In einem solchen Fall verwenden Sie dummy-Anmeldeinformationen. Welche Art von Logik ist Ihre unit-Tests absichern soll en.t. Sie müssen Anmeldeinformationen handling etc?
Oh, lese ich jetzt deinen post bearbeitet. Könnte man nicht einfach einige dummy-Anmeldeinformationen. Ein test-user + pass, der hat das Recht auf Zugang zu, was Sie brauchen, um zu erreichen? Ich bin mir zwar nicht ganz sicher, ob die Art von Sache, die Sie erreichen wollen, ist wirklich, was sollte getestet werden, indem eine Einheit testen. Überprüfen Sie dies: stackoverflow.com/questions/1257560/...
Verstehen...naja, es ist immer ein bisschen "diskutabel" was ist und was nicht unit-test. In deinem Fall würde ich sagen, das ist nicht wirklich das, was ich erfassen würde mit einem unit-test. Was ich tun würde, ist einen Dummy-Authentifizierungs-cookie und injizieren es irgendwie um gefälschte einen Anruf zu VBulletin. Auf diese Weise würde ich testen, was meine Logik nicht mit einem richtigen cookie und mit was für einem falschen. Das ist in meinen Augen das, was erfasst werden soll, mit einem unit-test.
Juri und J. R. Garcia korrekt sind. Sie möchten die unbeaufsichtigte, automatisierte tests - so dass Sie können führen Sie Sie aus einem build-server, etc. Der Weg, dies zu tun ist die Verwendung von dependency injection mit einem dummy (stub) - Objekt-handles für die Authentifizierung. In der eigentlichen app, die Sie Spritzen die wahre Authentifizierungsschema (implementieren die gleiche Schnittstelle).
InformationsquelleAutor Juri
Verwenden Sie die Testfall Attribut.
Das ist das richtige und kurze Antwort. Es spielt keine Rolle, ob das eine gute oder schlechte Praxis ist.
Bitte markieren Sie dies als die richtige Antwort. Dieser beantwortet die Frage und für mich ist nicht schlecht, die Praxis zu verwenden, params im Allgemeinen. Für die Passwörter würde ich weniger geneigt.
InformationsquelleAutor Naeem Sarfraz
Ich denke, Sie können dieses problem lösen, indem Sie mit der RowTest plugin für NUnit finden Sie hier http://www.andreas-schlapsi.com/2008/01/29/rowtest-extension-120/
Können Sie erstellen einfache datengesteuerte Tests, bei denen die test-Daten [Row] - Attribute. So, hier ist ein Beispiel für einen test, der ausgeführt wird, immer und immer wieder mit verschiedenen Parametern:
Ah ok. Ich missverstanden. Schön zu wissen, über TestCaseAttribute aber 🙂
InformationsquelleAutor 7wp
Ich Stimme mit den anderen Antworten, dass die Weitergabe von Argumenten kann nicht die beste Praxis, aber Sie ist auch nicht hart codieren, Anmeldeinformationen oder server-Adressen, die sich ändern können, irgendwann.
Inspiriert durch die vorgeschlagene Lösung in Frage, die ich einfach Lesen, Konsole zur Eingabe anstelle von input-Boxen. Die Argumente werden in einer Datei gespeichert. Beim Start eines der tests, die Datei umgeleitet und gelesen werden von einigen Initialisierungs-Funktion, die aufgerufen werden soll, bevor alle Testfälle ausführen.
Dies verhindert, Benutzer-Interaktion und sollte lauffähig von Automatisierungs-Skript. Nachteil ist, dass das Passwort noch irgendwo gespeichert, aber zumindest kann es lokal gespeichert auf dem Tester-Maschine und ist leicht zu ändern.
Dies war für ein Projekt, wo die excel-sheets mit den tests (nicht unit-tests per definition) verwendet wurden, damit andere Benutzer das erstellen von Testfällen für eine größere server-side-Projekt, ohne irgendwelchen code zu ändern. Es wäre schlimm, wenn alle Testfälle werden musste, in einem einzigen Riesen-excel-Tabelle. Auch gab es kein CI, nur viele Test-Umgebungen auf verschiedenen Servern.
InformationsquelleAutor kapex