Wie mache ich einen unit-test zu testen, Sie eine Methode, die überprüft, request-Header?
Ich bin sehr, sehr neu, um unit-Tests und versuche zu schreiben, einen test für eine ziemlich einfache Methode:
public class myClass : RequireHttpsAttribute
{
public override void OnAuthorization(AuthoizationContext filterContext)
{
var request = filterContext.HttpContext.Request;
var header = Convert.ToBoolean(request.Headers["Special-Header-Name"]);
if (!(header || request.IsSecureConnection))
{
HandleNonHttpsRequest(filterContext);
}
}
}
Diese Methode, die erbt von der RequireHttpsAttribute
, prüft, ob ein bestimmter header vorhanden ist, von einer Seite, wenn es fehlt, oder falsch, und die Seite ist nicht sicher, dann rufen HandleNonHttpsRequest
, sonst bringt er nichts.
Sind wir mit Moq und Nunit zum testen. Ich habe einige Mittel zu helfen, eine fakeHttpContext mit Moq, aber ehrlich gesagt, ich bin mir nicht sicher, wie Sie Sie verwenden oder wo Sie gehen, in meine unit-tests, um sicherzustellen, dass gefälschte HttpContexts sind oder nicht, verursacht die HandleNonHttpsRequest
Methode zu nennen.
Ich wirklich zu schätzen jede Beratung mit diesem Thema.
InformationsquelleAutor Dredj | 2012-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke!!! Dieser schickte mich in die richtige Richtung zu bekommen, einige erfolgreiche tests.
Hi, ich folgte auch den gleichen code für Spott in meinem unit-test, aber bin immer NullReferenceException für filterContext.DisplayMode
InformationsquelleAutor Darin Dimitrov
Ja, ich verwenden würde, Moq, und erstellen Sie eine
Mock<AuthorizationContext>
. Sie müssen eine Reihe von mock-Objekte, um den setup-fake-Anfrage, vor allem, um anzugeben, eine NameValueCollection von fake-Header.(sorry, wenn syntax oder die Verwendung ist leicht aus; tun Sie dies aus der Spitze von meinem Kopf)
Müssen Sie möglicherweise zu gehen und mock zusätzliche Mitglieder auf filterContext, dass HandleNonHttpsRequest ruft. Ich habe zwei Empfehlungen für den Gang über diese, wie es kann manchmal ein Streit sein, wenn die Methode, die Sie testen, ist, viele komplexe Dinge auf filterContext: 1) prüfen Sie visuell und, wenn es gerade genug vorwärts, verspotten Sie alle aufgerufen, Stücke 2) erstellen Sie die myClass.OnAuthorizationRequest, aber nicht implementieren code noch andere als der Aufruf HandleNonHttpsRequest. Laufen der test und die Befestigung fehlt/falsch verspottet Mitglieder, bis der test erfolgreich verläuft. Dann realisieren Sie Ihre Logik für OnAuthorizationRequest, Prüfung und Festsetzung (Spülen wiederholen), bis es geht.
InformationsquelleAutor HackedByChinese
Ich begegnet ein Problem mit die akzeptierte Lösung mit ASP.NET MVC 4. Um es zu beheben ich über den http-Kontext-Elemente-Attribut, da sonst die
sut.OnAuthorization
führte dazu, dass ein Objekt nicht definiert ist-Ausnahme:InformationsquelleAutor setebos