Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试ASP.NET Core 3.1 MVC控制器-值不能为空。(参数&x27;提供程序&x27;)_C#_Asp.net Mvc_Asp.net Core_Mstest - Fatal编程技术网

C# 单元测试ASP.NET Core 3.1 MVC控制器-值不能为空。(参数&x27;提供程序&x27;)

C# 单元测试ASP.NET Core 3.1 MVC控制器-值不能为空。(参数&x27;提供程序&x27;),c#,asp.net-mvc,asp.net-core,mstest,C#,Asp.net Mvc,Asp.net Core,Mstest,我最近开始使用.NET Core 3.1,之前我有.NET背景,只是想在新框架中对MVC控制器进行单元测试 在.NET中创建一个MVC网站,用于提供添加单元测试项目的选项,而Core没有;因此,我遵循了一些指南,并在MSTest中为HomeController索引视图组合了这个简单的测试 HomeController.cs: public class HomeController : Controller { public IActionResult Index() {

我最近开始使用.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);
}
我得到一个错误:

值不能为null。(参数“provider”)


我不知道是什么原因导致了这个错误。

为了实现我想要实现的目标,也就是说,一个简单的测试返回带有某些内容的视图(后者属于集成测试),这段代码对于第一个测试就足够了。第一次尝试时,我的实现过于复杂

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

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

        // assert
        Assert.IsNotNull(result);
    }

您实际想用简化的示例测试什么?这看起来像是在尝试测试框架代码。我想测试视图呈现的内容。这需要独立单元测试中不可用的框架代码。我们通常会在视图引擎启动并运行的集成测试中测试这一点哦,好的,您知道示例实现有什么好的资源吗?下面是一篇关于的文章,您还可以查看该文章中的示例代码:
var mockRepo=new Mock();mockRepo.Setup(repo=>repo.ListAsync()).ReturnsAsync(GetTestSessions());var controller=新的HomeController(mockRepo.Object);//Act var result=WAIT controller.Index();//Assert var viewResult=Assert.IsType(结果)