如何对这个简单的ASP.NET MVC控制器进行单元测试

如何对这个简单的ASP.NET MVC控制器进行单元测试,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,假设我有一个简单的ASP.NETMVC控制器要测试。我想测试控制器操作(本例中为Foo)是否简单地返回到另一个操作(本例中为Bar)的链接 您将如何测试TestController.Foo?(第一个或第二个链接) 我的实现有两次相同的链接。一个传递url抛出ViewData[]。这对我来说似乎更容易测试,因为我可以检查从Foo()返回的ViewData集合。即使这样,我也不知道如何在不依赖路由的情况下验证url本身 控制员: public class TestController : Contr

假设我有一个简单的ASP.NETMVC控制器要测试。我想测试控制器操作(本例中为Foo)是否简单地返回到另一个操作(本例中为Bar)的链接

您将如何测试TestController.Foo?(第一个或第二个链接)

我的实现有两次相同的链接。一个传递url抛出ViewData[]。这对我来说似乎更容易测试,因为我可以检查从Foo()返回的ViewData集合。即使这样,我也不知道如何在不依赖路由的情况下验证url本身

控制员:

public class TestController : Controller
{
    public ActionResult Foo()
    {
        ViewData["Link2"] = Url.Action("Bar");
        return View("Foo");
    }

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

}
“Foo”视图:


Foo方法实际上不太容易测试,因为它使用TestController基类中未预先填充的.Url属性(类型为UrlHelper)。如果您想继续存根UrlHelper对象,那么下面的文章将介绍如何进行此操作-

另一方面,Bar方法更容易测试,因为它不使用Controller.Url属性:

[TestMethod]
public void BarRouteReturnsBarViewResult()
{
    // Arrange
    var controller = new TestController();

    // Act
    var result = controller.Bar() as ViewResult;

    // Assert
    Assert.AreEqual(result.ViewName, "Bar");
}

Foo方法实际上不太容易测试,因为它使用TestController基类中未预填充的.Url属性(类型为UrlHelper)。如果您想继续存根UrlHelper对象,那么下面的文章将介绍如何进行此操作-

另一方面,Bar方法更容易测试,因为它不使用Controller.Url属性:

[TestMethod]
public void BarRouteReturnsBarViewResult()
{
    // Arrange
    var controller = new TestController();

    // Act
    var result = controller.Bar() as ViewResult;

    // Assert
    Assert.AreEqual(result.ViewName, "Bar");
}

谢谢我会澄清我的问题,因为我对Foo感兴趣。链接问题中的答案相当重,我很惊讶需要这么多的时间来测试它,并希望有一个更快的方法。谢谢。我会澄清我的问题,因为我对Foo感兴趣。链接问题中的答案相当重,我很惊讶要花这么多时间来测试它,并希望有一个更快的方法。