在MVC中为Custom ViewEngine编写单元测试

时间:2013-10-14 03:18:16

标签: c# asp.net-mvc

我创建了一个ViewEngine(用于桌面,平板电脑,iPhone):

public ViewEngine()
{
    Set 3 Locations
};

public override ViewEngineResult FindView(ControllerContext controllerContext, 
                                            string viewName, string masterName, bool useCache)
{
    Assign view locations...
}

然后我创建了一个单元测试类:

[Test]
public void Test_IPad_UserAgent()
{
    var controllerContext = new Mock<ControllerContext>();
    var controller = new PaymentController();

    controllerContext.SetupGet(p => p.HttpContext.Request.UserAgent).Returns("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10");

    controller.ControllerContext = controllerContext.Object;
    var result = controller.Index() as ViewResult;
    var viewData = result.ViewData;

}

我的问题是,如何编写断言来检查我的视图引擎是否为不同的UserAgent字符串返回正确的视图?

我很高兴为ViewEngine提供完整的代码如果有人乐意帮助我。

1 个答案:

答案 0 :(得分:0)

您可以检查ViewEngineCollection属性以查找您正在寻找的适当ViewEngine。尝试类似:

Assert.IsInstanceOf<MyCustomViewEngine>(result.ViewEngineCollection.First());

如果您需要测试ViewEngine类型之外的任何内容,例如返回的实际View,我建议您通过FindView方法中的自定义ViewEngine提供此类信息。例如,您可以在ViewData中提供一些信息,并在测试中检查该信息。例如:

view.ViewData.Add("path", "MyCustomPath/" + partialViewName;

请参阅此问题以获取更多信息,为何需要:Get View Name where ViewResult.ViewName is empty string for Unit Testing