我看到有很多关于同一主题的问题,但由于它们都来自2008年至2011年,我说有可能这可能是一种正式的方式来做到这一点没有外部库/扩展。
所以问题是在运行我的测试用例时,ViewName
为空:
// Act
ViewResult result = await Controller.Create(model) as ViewResult;
// Assert
Assert.AreEqual("Create", result.ViewName);
任何官方方式来解决这个问题?或者我可以测试一些其他财产?
答案 0 :(得分:0)
如果你的控制器方法只是
return View();
如果没有给出视图名称参数值,则不会在ViewName
属性中拥有视图的名称。对于单元测试控制器,请阅读:https://msdn.microsoft.com/en-us/library/ff847525(v=vs.100).aspx
如何使用ControllerContext
:
HomeController controller = new HomeController(repository);
controller.ControllerContext = new ControllerContext()
{
Controller = controller,
RequestContext = new RequestContext(new MockHttpContext(), new RouteData())
};
使用:
private class MockHttpContext : HttpContextBase {
private readonly IPrincipal _user = new GenericPrincipal(
new GenericIdentity("someUser"), null /* roles */);
public override IPrincipal User {
get {
return _user;
}
set {
base.User = value;
}
}
}