2012-02-08 3 views
2

私はいくつかのアコーディオンスタイルの機能を出力するために使用されるHtmlHelperを持っています。このヘルパーは、サイト全体で広範囲にわたって使用されます。Asp.Net Mvc HtmlHelperテストVeiwContext.Writer.WriteLine

この機能を作成するために使用されるコードはTagBuilderを多用しますし、もちろん、私たちは使用してHTMLを出力している。

htmlHelper.ViewContext.Writer.WriteLine(someTag.ToString(TagRenderMode.StartTag)); 

私たちは、このパターンを使用して、いくつかのヘルパーを持っているし、それは素晴らしい取り組んでいます。

これまでのところ、私が欲しいのはまさにそれです。しかし、これをテストすることは悪夢であることが証明されています。どのように私はhtmlHelper.ViewContext.Writer.WriteLineをテストするのですか?あなたが主張する場合、それは

+0

一つはここにある:http://blogs.teamb.com/craigstuntz/2010/09/10/38638/それは仮定しているようですメソッドが 'return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));'のようなものを返す 'public static MvcHtmlString ... 'を使ってHtmlHelperの標準拡張を行います。あなたのHTMLヘルパーメソッドは実際に何を返すのですか? – Nope

+0

私たちはMvcFormのものと同じパターンを使用しています。したがって、Accordian:IDisposableクラスを返します。 – iwayneo

+0

私は参照してください。私が投稿したリンクの男と同じようなテストをしないでください。あなたの場合、戻り値はAccordionクラスのインスタンスであり、それに応じて検査してアサーションすることができますか? – Nope

答えて

1
var viewContext = new ViewContext(); 
var viewContextWriter = new Mock<TextWriter>(); 
var text = string.Empty; 
viewContextWriter.Setup(m => m.WriteLine(It.IsAny<string>())) 
    .Callback((string s) => text += s); 
viewContext.Writer = viewContextWriter.Object; 
var html = new HtmlHelper(viewContext, new FakeViewDataContainer()); 

private class FakeViewDataContainer : IViewDataContainer 
{ 
    private ViewDataDictionary _viewData = new ViewDataDictionary(); 
    public ViewDataDictionary ViewData 
    { 
     get { return _viewData; } 
     set { _viewData = value; } 
    } 
} 

を重要ならば、我々はxUnitフレームと部品番号を使用している

は、テキスト方式のtext変数になりますWriter.WriteLineに書き込まれているもの。

0

次のコードを使用して、htmlヘルパーをテストし、検証します。

検証は別の例です。

次のことを試してみてください。

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 

//Following example contains two helpers that are being tested 
//A MyCustomBeginForm Helper and a OtherCoolHelperIMade Helper 
using(helper.MyCustomBeginForm("secretSauce")) 
{ 
    helper.ViewContext.Writer.WriteLine(helper.OtherCoolHelperIMade("bigMacSauce")); 
} 
//End Example 

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

//Asserts and string tests here for emitted HTML 
Assert.IsNotNullOrEmpty(result); 
私は見つけることができるサンプルの
関連する問題