我创建了一个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提供完整的代码如果有人乐意帮助我。
答案 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