我找不到任何理由让这个单元测试失败,但它每次都会失败。
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) );
}
}
答案 0 :(得分:2)
model
是null
这就是原因。
当您将string
作为参数传递给View(string)
时,string
实际上是视图名称,而不是model
。
将其投放为object
以使用model
的重载。
return View((object)model);
View(Object)
- 使用将ViewResult
呈现给object
的{{1}}创建model
view
。
response
- 使用呈现View(String)
的{{1}}名称创建ViewResult
object
。