我创建了一个ViewEngine (用于台式机、平板电脑、IPhone):
public ViewEngine()
{
Set 3 Locations
};
public override ViewEngineResult FindView(ControllerContext controllerContext,
string viewName, string masterName, bool useCache)
{
Assign view locations...
}然后我创建了一个Unit Test类:
[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提供完整的代码。
发布于 2013-10-15 02:13:18
您可以检查ViewEngineCollection属性,以获得您正在寻找的合适的ViewEngine。尝试如下所示:
Assert.IsInstanceOf<MyCustomViewEngine>(result.ViewEngineCollection.First());如果您需要测试ViewEngine类型之外的任何东西,比如返回的实际视图,我建议您在FindView方法中通过自定义ViewEngine提供此类信息。例如,您可以在ViewData中提供一些信息,然后在测试中检查这些信息。例如:
view.ViewData.Add("path", "MyCustomPath/" + partialViewName;有关为什么需要这样做的更多信息,请参阅此问题:Get View Name where ViewResult.ViewName is empty string for Unit Testing
https://stackoverflow.com/questions/19353012
复制相似问题