2009-12-14 17 views
5

Ich habe eine HTMLHelper-Erweiterungsmethode, die HTML an Response.Write ausgibt. Wie kann man das am besten testen?Unit Testing Eine Erweiterungsmethode auf HtmlHelper

Ich überlege mir, den HtmlHelper zu verspotten, der in die Methode übernommen wurde, bin aber unsicher, wie ich den an Response.Write gesendeten HTML-Code überprüfen soll.

Dank

Antwort

5

Wenn Sie einen HTML-Helfer Ausgabetext an den Browser verwenden, warum es nicht einen String und aus Ihrer Sicht so etwas wie ...

<%=Html.YourExtension() %> 

Es macht es eine haben Rückkehr viel mehr testbar.

Güte,

Dan

EDIT:

Änderung würde

public static void YourExtension(this HtmlHelper html) 
{ 
    ... 
    Response.Write(outputSting); 
} 

zu

public static string YourExtension(this HtmlHelper html) 
{ 
    ... 
    return outputSting; 
} 
+0

Editted mit der vorgeschlagenen Änderung –

0

eine Änderung der Unterschrift sein funktioniert dies, wenn t Die Methode "YourExtension" verwendet einfach HtmlHelper-Methoden, die einen String oder HtmlString zurückgeben. Aber Methoden wie "BeginForm" geben das MvcForm-Objekt zurück und auch das Form-Tag wird direkt auf TextWriter geschrieben, auf den HtmlHelper verweist.

1

Ich verwende den folgenden Code, um HTML-Helfer zu testen und zu validieren. Wenn Sie etwas komplexes tun, wie wegwerfbare Helfer wie Beginform oder Helfer mit Abhängigkeiten, brauchen Sie ein besseres Testframework, dann schauen Sie sich nur die Zeichenkette eines einzelnen Helfers an.

Validierung ist ein weiteres Beispiel.

Versuchen Sie Folgendes:

 var sb = new StringBuilder(); 
     var context = new ViewContext(); 
     context.ViewData = new ViewDataDictionary(_testModel); 
     context.Writer = new StringWriter(sb); 
     var page = new ViewPage<TestModel>(); 
     var helper = new HtmlHelper<TestModel>(context, page); 

     //Do your stuff here to exercise your helper 


     //Get the results of all helpers 
     var result = sb.ToString(); 

     //Asserts and string tests here for emitted HTML 
     Assert.IsNotNullOrEmpty(result);