单元测试 ASP.NET 核心 3.1 MVC 控制器 - 值不能为空。 (参数'provider')

Unit testing ASP.NET Core 3.1 MVC controller - value cannot be null. (Parameter 'provider')

我最近开始使用 .NET Core 3.1,因为我有 .NET 背景,只是想加快在新框架中对 MVC 控制器进行单元测试的速度。

在 .NET 中,创建一个 MVC 网站用于提供添加单元测试项目的选项,而 Core 则没有;所以我遵循了一些指南,并将这个简单的测试放在了 MSTest 中,用于 HomeController 索引视图。

HomeController.cs:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return this.View();
    }
}

HomeControllerTests.cs:

[TestMethod]
public void WhenIndexIsExecutedAsyncThenContentShouldBeReturned()
{
    // arrange
    var httpContext = new DefaultHttpContext();
    var controller = new HomeController()
        {
            ControllerContext = new ControllerContext
            {
                HttpContext = httpContext
            }
        };

    var actionContext = new ActionContext
        {
            HttpContext = httpContext
        };

    // act
    var result = controller.Index().ExecuteResultAsync(actionContext);

    // assert
    Assert.IsNotNull(result);
    Assert.IsNull(result.Exception);
}

我得到一个错误:

Value cannot be null. (Parameter 'provider')

而且我不知道是什么导致了错误。

为了我想要实现的目标,即对 return 具有某些内容的视图进行简单测试(后者属于集成测试),此代码足以满足第一次测试。我的实现在第一次尝试时过于复杂。

    [TestMethod]
    public void WhenIndexIsExecutedAsyncThenViewShouldNotBeNull()
    {
        // arrange
        var controller = new HomeController();

        // act
        var result = controller.Index() as ViewResult;

        // assert
        Assert.IsNotNull(result);
    }