0

在我的单元测试中,我发现当我使用没有视图名称的 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 是可以在单元测试的断言中检查的可靠属性之一。

4

1 回答 1

3

这是 ASP.NET MVC 的一个众所周知的“特性”。微软从第一个版本开始就记录了它......

当没有明确指定视图名称时,框架会尝试根据约定(在“Views\controllername\actionname”或“Shared\controllername\actionname”中)找到一个。ViewName仅当您想偏离该约定时才相关。所以你的单元测试做出了错误的假设。

HTH。

于 2009-11-18T02:32:50.637 回答