2009-12-14 5 views
5

Ho un metodo di estensione HTMLHelper che restituisce HTML a Response.Write. Il modo migliore per testare questo?Unit Testing Un metodo di estensione su HtmlHelper

Sto prendendo in considerazione il mocking di HtmlHelper passato al metodo, ma non sono sicuro di come dovrei verificare l'HTML inviato a Response.Write.

Grazie

risposta

5

Se si utilizza un helper HTML in testo output al browser perché non avete restituire una stringa e nella vista fare qualcosa di simile ...

<%=Html.YourExtension() %> 

lo rende una molto più testabile.

Gentilezza,

Dan

EDIT:

modifica sarebbe un cambiamento della firma

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

a

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

Editted con la modifica suggerita –

0

Questo funziona se t Il metodo "YourExtension" sta semplicemente usando i metodi HtmlHelper che restituiscono string o HtmlString. Ma metodi come "BeginForm" restituiscono l'oggetto MvcForm e anche il tag form viene scritto direttamente su TextWriter a cui HtmlHelper fa riferimento.

1

Uso il seguente codice per verificare e convalidare gli helper HTML. Se stai facendo qualcosa di complesso, come gli helper basati su gettare come ad esempio beginform o helper con dipendenze hai bisogno di un framework di test migliore, solo guardando la stringa di un singolo helper.

La convalida è un altro esempio.

provare quanto segue:

 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);