asp.net 核心 5.0 的模拟框架

本文关键字:模拟 框架 net 核心 asp | 更新日期: 2023-09-27 18:37:22

我最近安装了Visual Studio 2015,并启动了一个包含网站和asp类库的项目,这些类库将包含网站的单元测试。我通常使用Moq进行模拟,但我对尝试不同的模拟框架并不陌生。我遇到的问题是我添加了 Moq 作为单元测试项目的引用并开始使用它。起初一切似乎都很好,直到我尝试编译。

当我编译时,我收到一条错误消息,说:

ASP.NET Core 5.0 error CS0246: The type or namespace name 'Moq' could not be found (are you missing a using directive or an assembly reference?)

我注意到我可以在代码视图中 ASP.NET 5.0 和 ASP.NET Core 5.0 之间切换,并且在选择 Core 5.0 时 ASP.NET 我收到错误,但在选择 5.0 ASP.NET 时没有。我试图寻找答案,但我没有任何运气。

问题是 Moq 不适用于 vnext,我应该使用不同的框架(如果是这样,哪个有效?我的项目.json:

{
"version": "1.0.0-*",
"dependencies": {
    "Web": "1.0.0-*",
    "Xunit.KRunner": "1.0.0-beta1",
    "xunit": "2.0.0-beta5-build2785",
    "Moq": "4.2.1409.1722"
},
"frameworks": {
    "aspnet50": {
        "dependencies": {
        }
    },
    "aspnetcore50": {
        "dependencies": {
        }
    }
},
"commands": {
    "test": "Xunit.KRunner"
}
}

asp.net 核心 5.0 的模拟框架

Microsoft ASP.NET 团队创建了一个特殊版本的Moq供内部使用。你可以在 asp.net github 页面上找到一个 fork 项目。

怎么用呢?

  • 在 project.json 中注册 Moq 依赖项:

    {
        "frameworks": {
            "dnx451": {
                "dependencies": {
                    "Moq": "4.2.1312.1622"
                }
            },
            "dnxcore50": {
                "dependencies": {
                    "moq.netcore": "4.4.0-beta8"
                }
            }
        }
    }
    
  • 在项目主目录中创建 NuGet.config 文件。

    <?xml version="1.0" encoding="utf-8"?>
        <configuration>
            <packageSources>
                <add key="AspNetVNext" value="https://www.myget.org/F/aspnetcidev/api/v3/index.json" />
                <add key="NuGet" value="https://api.nuget.org/v3/index.json" />
            </packageSources>
        </configuration>
    

并使用最小起订量! :)

我想

到目前为止,nuget 提要中没有使用 asp.net 核心 5.0 的 Moq 版本,但我认为您可以使用 Asp.Net 5.0。

您应该能够将大多数库与 aspnet50 框架一起使用,因为这与以前的 .net 框架中可用的结构/CLR"样式"相同。这将包括最小起订量/犀牛/Nunit等。

在 aspnetcore50 中,您使用的是新的 CoreCLR,并且需要使用也切换为与新的 CoreCLR 库一起使用的依赖项。Xunit 已经有了这个,因为 MS 团队这样做了,以便他们可以进行单元测试,因此它是可用的。我不知道有一个嘲笑框架,但我正在寻找一个。

因此,如果您通过删除 aspnetcore50 将项目限制为仅使用 aspnet50 框架,那么您应该可以使用任何框架。

请注意,这为您提供了一个限制,即您只能在主 CLR 可用的情况下进行单元测试。如果您希望应用在部署时在 CoreCLR 上运行,这可能会对您造成限制(因为您没有严格针对相同内容进行测试,尽管它们应该是等效的)。

关于 NUnit 可用性的 github 问题,这里还有更多关于这些要点的讨论

引用自 : https://neelbhatt40.wordpress.com/2016/10/15/moq-in-asp-net-core/

您需要在 project.json 中添加以下配置

{
    "version": "1.0.0-*",
    "description": "AspNetCoreMoq.Test Class Library",
    "authors": [ "armen" ],
    "tags": [ "" ],
    "projectUrl": "",
    "licenseUrl": "",
    "frameworks": {
        "dnxcore50": {
            "dependencies": {
                "Microsoft.CSharp": "4.0.1-beta-23516",
                "System.Collections": "4.0.11-beta-23516",
                "System.Linq": "4.0.1-beta-23516",
                "System.Runtime": "4.0.21-beta-23516",
                "System.Threading": "4.0.11-beta-23516",
                "AspNetCoreMoq": "",
                "xunit": "2.1.0-rc1-build3168",
                "xunit.runner.dnx": "2.1.0-rc1-build204",
                "moq.netcore": "4.4.0-beta8"
            }
        }
    },
    "commands": {
        "test": "xunit.runner.dnx"
    }
}

然后使用以下 URL 创建 Nuget 源:

https://www.myget.org/F/aspnet-contrib/api/v3/index.json