MVC ViewResult.VIewName null,即使在设置后也是如此



我正在尝试为 MVC 应用程序编写单元测试。 我试图测试我的控制器是否返回正确的视图名称。

这是 im 测试的控制器操作:

public IActionResult Index(string reportcode)
{
if(string.IsNullOrEmpty(reportcode))
ReportCode = reportcode;
ViewBag.GridSource = GetReportData(reportcode);
return View("Index");
}

这是我的单元测试:

[Test]
public void Index_ReturnCorrectView()
{
var controller = new HomeController();
var result = controller.Index("COMD") as ViewResult;
Assert.AreEqual("Index", result.ViewName); 
}

我从单元测试中得到的错误应该是"索引",但得到空。 我做了很多搜索,大多数答案都说 ViewName 属性应该在返回视图时声明它之后设置。我尝试了相同的方法,但它仍然不起作用。

谢谢

Controller.View(( 的文档指出:

此方法重载 View 类返回一个 ViewResult 对象 具有空的视图名称属性。如果您正在编写单元测试 控制器操作,请考虑空的 ViewName 属性 不采用字符串视图名称的单元测试。

在运行时,如果 ViewName 属性为空,则当前操作 名称用于代替视图名称属性。

因此,当期望视图与当前操作同名时,我们可以测试它是一个空字符串。

或者,Controller.View(ViewName, Model( 方法将设置 ViewName。

我的控制器方法

public ActionResult Index()
{
return View("Index");
}

测试方法

[TestMethod]
public void Index()
{
// Arrange
HomeController controller = new HomeController();
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
Assert.IsTrue(result.ViewName == "Index");
}

最新更新