【问题标题】:Unit testing ASP.NET Core 3.1 MVC controller - value cannot be null. (Parameter 'provider')单元测试 ASP.NET Core 3.1 MVC 控制器 - 值不能为空。 (参数“提供者”)
【发布时间】:2021-03-28 02:24:35
【问题描述】:

我最近开始使用 .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);
}

我收到一个错误:

值不能为空。 (参数“提供者”)

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

【问题讨论】:

  • 实际上想用您的简化示例测试什么?这看起来像是在尝试测试框架代码。
  • 我想测试视图渲染的内容。
  • 这需要独立单元测试中不可用的框架代码。通常使用视图引擎启动并运行的集成测试来测试它
  • 哦,好的,请问您知道任何用于示例实现的好资源吗?
  • 这是一篇关于Unit test controller logic in ASP.NET Core的文章,您也可以查看该文章中的示例代码:var mockRepo = new Mock<IBrainstormSessionRepository>(); mockRepo.Setup(repo => repo.ListAsync()) .ReturnsAsync(GetTestSessions()); var controller = new HomeController(mockRepo.Object); // Act var result = await controller.Index(); // Assert var viewResult = Assert.IsType<ViewResult>(result);

标签: c# asp.net-mvc asp.net-core mstest


【解决方案1】:

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

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

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

        // assert
        Assert.IsNotNull(result);
    }

【讨论】:

    猜你喜欢
    • 2016-08-14
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多