【问题标题】:Mocking framework for asp.net core 5.0asp.net core 5.0 的模拟框架
【发布时间】:2015-01-13 09:02:13
【问题描述】:

我最近安装了 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 之间切换,在选择 ASP.NET Core 5.0 时出现错误,但在选择 ASP.NET 5.0 时没有。我尝试寻找答案,但没有任何运气。

问题是起订量不能与 vnext 一起使用,我应该使用不同的框架(如果可以的话,哪个可行?)还是我可以以某种方式解决这个问题? 我的project.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"
}

}

【问题讨论】:

    标签: c# asp.net moq asp.net-core


    【解决方案1】:

    Microsoft 的 ASP.NET 团队创建了一个特殊版本的 Moq 供内部使用。你可以在asp.net github page 上找到一个 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>
      

    并使用最小起订量! :)

    【讨论】:

    • 我必须将 AspNetVNext 值设置为 https://www.myget.org/F/aspnet-contrib/api/v3/index.json 才能找到 moq.netcore。
    • Armen Shimoon's blog 中提供的有关添加新 NuGet 提要以将 Moq 添加到 dnxcore50 的其他详细信息(附图片!)
    • 这个答案开头的asp.net github page链接是404损坏。
    【解决方案2】:

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

    【讨论】:

    • 我删除了 "aspnetcore50": {"dependencies": {}} 并且它开始工作了
    • Lukasz Pyrzyk 在下面有一个更新的答案,可以让 Moq 使用 aspnetcore50。
    【解决方案3】:

    您应该能够将大多数库与 aspnet50 框架一起使用,因为它与以前的 .net 框架中可用的相同结构/CLR“样式”一起使用。这将包括 Moq/Rhino/Nunit 等。

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

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

    请注意,尽管这给了您一个限制,即您只能在主 CLR 可用的地方进行单元测试。如果您打算在部署时在 CoreCLR 上运行您的应用程序,这可能对您有限制(因为您没有严格测试相同的东西,尽管它们应该是等效的)。

    关于这些点还有更多的讨论here on a github issue about NUnit availability

    【讨论】:

      【解决方案4】:

      参考来自: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

      【讨论】:

        猜你喜欢
        • 2016-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        • 1970-01-01
        • 2021-07-22
        • 2022-11-01
        • 1970-01-01
        相关资源
        最近更新 更多