【发布时间】:2011-10-10 18:36:42
【问题描述】:
我的 HomeController.Index() 操作有效(在正常操作中),但在 NUnit 测试下,返回的 ActionResult (ViewResult) 始终具有空视图和视图名称。
这里是我正在运行的测试(为了便于阅读,浓缩成一个方法)。
- 我正在使用 Moq、NUnit、Castle.Windsor
- 结果的模型正确,但没有与结果关联的视图。
- 除了最后一个断言之外,所有断言都通过了,它引用了 result.View。
为了清晰而重复 - 在正常操作中返回正确的视图。
[Test]
public void WhenHomeControllerIsInstantiated()
{
Moch mochRepository = new Mock<IRepository>();
mochRepository.Setup(s => s.Staff.GetStaffByLogonName("twehr"))
.Returns(new Staff { StaffID = 5, LogonName = @"healthcare\twehr" });
IController controller = new HomeController(mochRepository.Object);
IPrincipal FakeUser = new GenericPrincipal(new GenericIdentity("twehr", "Basic"), null);
var result = ((HomeController)controller).Index(FakeUser) as ViewResult;
Assert.IsNotNull(controller);
Assert.IsInstanceOf(typeof(HomeController), controller);
Assert.IsInstanceOf(typeof(HomeViewModel), ((ViewResult)result).Model);
// result.View and result.ViewName are always null
Assert.AreEqual("Index", result.ViewName);
}
显然,我忽略了测试设置中的某些内容,但找不到。任何帮助表示赞赏。
【问题讨论】:
-
View 和 ViewName 可以为 null,但由于 约定优于配置,它仍然可以工作。我猜操作方法没有明确指定视图或视图名称?
-
查看 HomeController 的 Index 方法会很有帮助。另外,您是否尝试过调试单元测试并单步执行控制器代码?
标签: asp.net-mvc-3 view controller nunit