【发布时间】:2011-09-28 20:27:51
【问题描述】:
我一直在查看this Stackoverflow 问题并已实施答案。在我在我的帮助方法中调用 HtmlHelper.Partial 之前,它工作得很好而且很花哨,下面列出了。我知道它可能不是最好的代码,但这是在我可以重构更多应用程序之前。它抛出的错误是
上一个方法'ViewContext.get_TempData();'需要返回值或抛出异常。
我错过了模拟某些东西,还是有更好的方法来呈现用户控件?
编辑好吧,我确实错过了一些东西,我没有调用 mocks.Replay()。现在有另一个错误,它需要在 routeData...progress 中命名为控制器的东西。
编辑 #2 澄清我正在尝试模拟对 HtmlHelper.Partial(partialPath, model) 的调用,我只是希望它返回我想发送的任何 partialPath,或者至少不返回爆炸。我确实找到了这个页面http://andrevianna.com/blog/?p=8,这非常有帮助,而且我几乎可以正常工作了。这也很有帮助http://farm-fresh-code.blogspot.com/2009/10/mocking-htmlhelper-class-with.html
public static string RenderRateDetails(this HtmlHelper html, string partialPath, RatesViewData model, RateDetailType type)
{
switch (type)
{
case RateDetailType.AR:
if (model.ExistingRateDetailAR != null)
return html.Partial(partialPath, model).ToString();
break;
case RateDetailType.AP:
if (model.ExistingRateDetail != null)
return html.Partial(partialPath, model).ToString();
break;
}
return string.Empty;
}
【问题讨论】:
-
建议重构:您可以通过使用继承来稍微简化您的场景。如果您有一个 RatesViewDataBaseModel 和几个子类 RatesViewDataAPModel 和 RatesViewDataARModel,那么您可以执行基于“is”运算符的测试,而不是目前更复杂的两阶段测试。
-
这是未来的想法,但是视图模型太大了,控制器也太大了,我还不确定更改它的含义。
-
您还提到了模拟问题,您实际上想在这里测试什么?如果我们看到您的单元测试可能会有所帮助。
-
我编辑了帖子以希望澄清。我想我正在尝试测试如果 ExistingRates 之一为空,页面是否不会爆炸。
标签: asp.net-mvc-3 mocking rhino-mocks html-helper