MVC 2简单测试失败 - 为什么?

时间:2013-05-30 20:56:11

标签: asp.net-mvc unit-testing asp.net-mvc-2

我找不到任何理由让这个单元测试失败,但它每次都会失败。

HomeController.cs:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = "Whatever";

        return View( model );
    }
}

HomeControllerTest.cs:

[TestClass]
public class HomeControllerTest
{
    [TestMethod]
    public void Index()
    {
        var controller = new HomeController();

        var result = controller.Index() as ViewResult;

        var model = result.ViewData.Model;

        Assert.IsInstanceOfType( model, typeof(string) );
    }
}

结果不为null,也不是result.ViewData。但result.ViewData.Model始终为null。

世界上有什么导致这种失败?这是一个如此简单的测试...

修改

这甚至更奇怪。如果我创建一个类,并使用该类作为模型,它不会失败。它只在模型是字符串时才会失败!即,这通过:

HomeController.cs:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new SomeClass
            {
                Name = "Whatever"
            };

        return View( model );
    }
}

public class SomeClass
{
    public string Name { get; set; }
}

HomeControllerTest.cs

[TestClass]
public class HomeControllerTest
{
    [TestMethod]
    public void Index()
    {
        var controller = new HomeController();

        var result = controller.Index() as ViewResult;

        var model = result.ViewData.Model;

        Assert.IsInstanceOfType( model, typeof(SomeClass) );
    }
}

1 个答案:

答案 0 :(得分:2)

modelnull这就是原因。 当您将string作为参数传递给View(string)时,string实际上是视图名称,而不是model

将其投放为object以使用model的重载。

return View((object)model);

View(Object) - 使用将ViewResult呈现给object的{​​{1}}创建model view

response - 使用呈现View(String)的{​​{1}}名称创建ViewResult object