Sicherstellen, dass eine Ansicht vorhanden ist
Ich bin derzeit auf der Suche in unit-Tests für eine neue Anwendung, die ich habe, zu erstellen. Ich habe die basic Tests schön (Prüfung der ActionResult Klassen ist ziemlich nett). Eine Sache, die ich tun wollen, stellen Sie sicher, obwohl, ist, dass eine viewpage existiert in meiner Lösung. Ich bin mir nicht 100% sicher, dass mein test richtig ist, also wenn jemand noch Anregungen haben, zögern Sie nicht!
Dies ist ein test ich habe, um zu überprüfen, dass meine login-Methode auf meine security-controller ist, das richtige zu tun:
[TestMethod]
public void Login()
{
var authProvider = new Mock<IAuthenticationProvider>();
var controller = new SecurityController(authProvider.Object);
var result = controller.Login() as ViewResult;
Assert.IsNotNull(result, "ActionResult should be of type ViewResult.");
Assert.AreEqual(result.ViewName, "login", "Does not render login page.");
}
Meine Erklärung, in der der test wäre:
- Aufruf der Methode 'Login' auf dem controller
- Bestätigen, es ist ein rendering-Ansicht (indem man prüft, ob es gibt ein ViewResult-Objekt)
- Bestätigen, es ist die rendering-Ansicht von rechts (durch die überprüfung der viewname)
Was ich möchte, ist ein Dritter geltend machen, um zu sehen, ob der view gerendert werden soll, tatsächlich existieren.
Einige sekundäre Fragen, die ich habe, wäre:
- Sollte ich split dieser test bis?
- Sollte ich es umbenennen (wie, äh, LoginRendersCorrectView oder so)
Dank!
Hinweis: ich bin explizit versuchen zu vermeiden, überprüfen Sie das Dateisystem. Ich bin Art von Hoffnung für einen Weg, um die ViewEngine bestätigen die Ansicht tatsächlich existiert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, ich glaube nicht, dass Sie sich aufspalten sollten den test bis, so lange als nur hauptsächlich einen Dritten geltend machen und nicht sehr viel mehr code.
Ja, ich denke, dass ein beschreibender name wäre hilfreich.
Da hast du überprüft, dass es die richtige Ansicht name schon, würde nicht einfach erfolgreich rendering der view überprüfen Sie Ihre Existenz?
Ich denke, dass seine große Sie arbeiten auf vollständige Testabdeckung aber hier habe ich das Gefühl, dass dort vielleicht die effektivere Nutzung Ihrer Zeit, wenn Sie waren in der Lage sich zu bewegen auf den Teil, wo Sie überprüfen, dass die Einheiten, die für die eigentlichen, spezifischen login-Funktionen (z.B. überprüfen von Passwort-hashes oder was auch immer) korrekt arbeiten.
Wissen, dass die Ansicht existiert in der Lösung ist nicht sonderlich hilfreich. Was ist Ihnen wirklich wichtig ist, dass die Sicht eingesetzt werden, da Ihre Nutzer (hoffe ich) nicht laufen Ihre Website in Visual Studio. In anderen Worten, was Sie fordern ist nicht ein unit-test, sondern ein Integrationstest. Daher sollten Sie verwenden Sie ein geeignetes Werkzeug für den job. Betrachten Sie einen web Test-Frameworks wie Selen.
Ich bin völlig einverstanden mit Jason, aber ich glaube nicht, dass das, was Sie zu tun versuchen, tatsächlich trägt der Testabdeckung. Nachdem alle, Rendern und testen Verhalten wird bereits abdecken oder nicht, ob es existiert.
Viele Entwickler über Bord gehen, wenn Sie das erste mal gebissen zu werden, die von dem test-driven development-bug. Sie wollen testen Ausfälle genau sagen, was falsch ist, so dass Sie nicht haben zu Graben in und Debuggen. Das ist nicht der primäre Zweck der Prüfung; die Prüfung ist für die Prüfung richtig Verhalten, damit Sie nicht liefern schlechte software. Wenn etwas falsch ist, dann können Sie Debuggen. Es gibt keine Notwendigkeit zu haben, eine Testumgebung, so dass bestimmte, dass die Test-engine weiß, was genau das Problem ist.
Könnten Sie versuchen, verwenden Sie die FindView Methode der ViewEngineCollection Objekt, haben Sie in der ViewResult um zu überprüfen, ob das MVC-framework können, suchen Sie die Sicht.
Wie andere vorgeschlagen haben, ich denke, diese 3'rd Behaupten (dass der Blick tatsächlich existiert), ist nicht etwas, das einen echten Mehrwert zu den tests, aber dennoch, hier ist der code, um zu überprüfen für die Existenz:
Hoffe, das hilft.
Wenn Sie mit beta-code-behind-Datei erstellen wird eine Klasse für die Ansicht, die Sie überprüfen können, für die Verwendung von reflection.
Ansonsten könnten Sie prüfen, die für die Datei vorhanden sind in der richtigen Position.