我如何单元测试返回PartialViewResult的MVC Action?

时间:2010-12-19 23:13:40

标签: c# model-view-controller action

我有一个Action如下:

public PartialViewResult MyActionIWantToTest(string someParameter) 
{
    // ... A bunch of logic
    return PartialView("ViewName", viewModel);
}

当我检查结果时,它有一些属性,但它们是null或空。 唯一具有任何内容的属性是ViewEngineCollection,它不包含任何特定于我的方法的内容。

有没有人有一些示例代码可以测试PartialViewResult

2 个答案:

答案 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.");
  }