首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC中为自定义ViewEngine编写单元测试

在MVC中为自定义ViewEngine编写单元测试
EN

Stack Overflow用户
提问于 2013-10-14 11:18:16
回答 1查看 406关注 0票数 0

我创建了一个ViewEngine (用于台式机、平板电脑、IPhone):

代码语言:javascript
复制
public ViewEngine()
{
    Set 3 Locations
};

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

然后我创建了一个Unit Test类:

代码语言:javascript
复制
[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提供完整的代码。

EN

回答 1

Stack Overflow用户

发布于 2013-10-15 02:13:18

您可以检查ViewEngineCollection属性,以获得您正在寻找的合适的ViewEngine。尝试如下所示:

代码语言:javascript
复制
Assert.IsInstanceOf<MyCustomViewEngine>(result.ViewEngineCollection.First());

如果您需要测试ViewEngine类型之外的任何东西,比如返回的实际视图,我建议您在FindView方法中通过自定义ViewEngine提供此类信息。例如,您可以在ViewData中提供一些信息,然后在测试中检查这些信息。例如:

代码语言:javascript
复制
view.ViewData.Add("path", "MyCustomPath/" + partialViewName;

有关为什么需要这样做的更多信息,请参阅此问题:Get View Name where ViewResult.ViewName is empty string for Unit Testing

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19353012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档