在我的单元测试中,我发现当我使用没有视图名称的View()从控制器操作返回时,ViewResult.ViewName被设置为string.Empty。为了设置它,必须将其指定为View()调用的参数。例如,给出以下单元测试:
[TextFixture]
public class MyControllerTests
{
[Test]
public void TestMyAction()
{
var controller = new MyController();
var result = controller.MyAction();
Assert.AreEqual("MyAction", result.ViewName);
}
}
以下操作实现将导致单元测试失败:
public class MyController : Controller
{
public ActionResult MyAction()
{
return View();
}
}
虽然这个会通过:
public class MyController : Controller
{
public ActionResult MyAction()
{
return View("MyAction");
}
}
我在.NET 4.0上使用ASP.NET MVC 2(pre-beta)。但是,我没有使用任何特定于.NET 4.0的东西。我发现这种行为很奇怪,因为我认为ViewName是可以在单元测试的断言中检查的可靠属性之一。
答案 0 :(得分:3)
这是ASP.NET MVC的一个众所周知的“功能”。自第一个版本以来,Microsoft已经记录了它......
如果未指定显式视图名称,框架将尝试根据约定(在“Views \ controllername \ actionname”或“Shared \ controllername \ actionname”中)找到一个。 ViewName
仅在您想要偏离该约定时才有意义。因此,您的单元测试会做出错误的假设。
HTH。