0

我创建了一个 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 的完整代码。

4

1 回答 1

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

于 2013-10-14T18:13:18.037 回答