我有一个Action
如下:
public PartialViewResult MyActionIWantToTest(string someParameter)
{
// ... A bunch of logic
return PartialView("ViewName", viewModel);
}
当我检查结果时,它有一些属性,但它们是null或空。
唯一具有任何内容的属性是ViewEngineCollection
,它不包含任何特定于我的方法的内容。
有没有人有一些示例代码可以测试PartialViewResult
?
答案 0 :(得分:9)
假设您有Action
,看起来像这样:
public PartialViewResult MyActionIWantToTest(string someParameter)
{
var viewModel = new MyPartialViewModel { SomeValue = someParameter };
return PartialView("MyPartialView", viewModel);
}
注意:MyPartialViewModel
是一个只有一个属性的简单类 - SomeValue
。
NUnit示例可能如下所示:
[Test]
public void MyActionIWantToTestReturnsPartialViewResult()
{
// Arrange
const string myTestValue = "Some value";
var ctrl = new StringController();
// Act
var result = ctrl.MyActionIWantToTest(myTestValue);
// Assert
Assert.AreEqual("MyPartialView", result.ViewName);
Assert.IsInstanceOf<MyPartialViewModel>(result.ViewData.Model);
Assert.AreEqual(myTestValue, ((MyPartialViewModel)result.ViewData.Model).SomeValue);
}
答案 1 :(得分:2)
接受的答案对我不起作用。我做了以下工作来解决我看到的测试失败。
这是我的行动:
[Route("All")]
public ActionResult All()
{
return PartialView("_StatusFilter",MyAPI.Status.GetAllStatuses());
}
我必须给结果一个类型才能使它工作。我使用PartialViewResult返回部分视图,而不是返回完整视图并使用View Result的其他操作。这是我的测试方法:
[TestMethod]
public void All_ShouldReturnPartialViewCalledStatusFilter()
{
// Arrange
var controller = new StatusController();
// Act
var result = controller.StatusFilter() as PartialViewResult;
// Assert
Assert.AreEqual("_StatusFilter", result.ViewName, "All action on Status Filter controller did not return a partial view called _StatusFilter.");
}