Ich habe mein Fake-Objekt für HttpRequest bereit (ein Wrapper und eine Schnittstelle) ... da ich keinen Konstruktor aufrufen muss, wie übergebe ich die gefälschte HttpRequest, ohne die Schnittstelle dieser Methode zu brechen?Wie Unit-Test eine statische Methode mit einem gefälschten Objekt für die Abhängigkeit testen?
public static int ParseQueryInt(string key, int defaultValue)
{
NameValueCollection nvc;
if (HttpContext.Current.Request.QueryString["name"] != null)
{
//Parse strings.
}
}
EDIT: Akselson Lösung ist die kreativste und dies Proof of Concept gearbeitet, viel zu meiner Überraschung, obwohl ich auch Skeet-Lösung verwendet, da es wahrscheinlicher aussieht in allen Situationen zu arbeiten.
public class Class1
{
[Test]
public void Test()
{
HttpContext.Current = new HttpContext(
new HttpRequest("test.aspx", "http://test.com/test.aspx", "querystring=value"),
new HttpResponse(new StringWriter())
);
Assert.AreEqual(HttpContext.Current.Request.QueryString["querystring"], "value");
}
}
Wau, das war schnell! Und du hast meine Gedanken gelesen :) –
Du könntest die zweite Überladung intern machen und sie aus der Test Assembly über das InternalsVisibleTo Attribut benutzen. Sie können Ihre API daher nicht für Unit-Testzwecke verwenden. –