我在控制器中有一个ASP.Net MVC方法:
public ActionResult Update()
{
if(!ControllerContext.IsChildAction)
{
return RedirectToAction("Details","Project");
}
return PartialView();
}当我在nunit测试上运行这个方法时,我有一个错误的IsChildProperty。如何将此属性模拟为true以测试方法的其他部分?此属性是只读的:/
发布于 2015-07-29 14:52:22
您需要模拟正在测试的控制器的ControllerContext,IsChildAction属性仅与getter一起是虚拟的,您可以将其设置为返回true,模拟将生成一个派生类,该派生类将覆盖该属性以返回所设置的内容。
例如,如果您使用的是Moq:
var mockControllerContext = new Mock<ControllerContext>();
mockControllerContext.SetupGet(m => m.IsChildAction).Returns(true);
YourController controller = new YourController();
controller.ControllerContext = mockControllerContext.Object; 更多信息:
https://coderwall.com/p/abwnkq/common-asp-net-mvc-controller-mocking-scenarios
发布于 2015-07-29 15:00:30
步骤1)虽然ControllerContext的IsChildAction是只读的,但幸运控制器的ControllerContext属性不是只读的,因此可以在测试目标控制器上自由设置它。
幸运的是,IsChildAction getter是虚拟的。这就打开了嘲笑它的可能性,或者即使没有嘲弄,也可以创建一个子代并覆盖这个getter来返回您的选择。
https://stackoverflow.com/questions/31703656
复制相似问题