【问题标题】:Using MSTest, xUnit or NUnit with dotnet core将 MSTest、xUnit 或 NUnit 与 dotnet 核心一起使用
【发布时间】:2016-10-17 18:49:53
【问题描述】:

TLDR - 跳转到答案以获取有关工作 xUnit 或 MSTest 设置的详细信息。 xUnit 是最不痛苦的选择。

我无法让 NUnit 在我的构建服务器上运行,因此我尝试了 xUnit 和 MSTest - 两者都不适合我。

MSTest 我只是不明白 - 我希望这可以工作,但是当我尝试从 nuget 安装 dotnet-test-mstest 时,我遇到了依赖问题,因为它的所有依赖库都与 netcoreapp1 不兼容......

依赖 MSTest.ObjectModel 1.0.1-preview 不支持框架 .NETCoreApp,Version=v1.0。

依赖 MSTest.TestAdapter.Dotnet 1.0.4-preview 不支持框架。

任何人都可以就为什么会发生这种情况提供任何建议吗?

【问题讨论】:

  • 你需要显示你得到的错误和你的项目json,否则只能推测。最重要的是 - 如果您转到 NuGet nuget.org/packages/MSTest.TestAdapter.Dotnet,您将看到:“所有者已取消列出此包。这可能意味着该包已被弃用或不应再使用。” - 所以我想这可能是你问题的一部分。
  • 我真的不能再提供了——错误信息在我原来的描述中。我只是在创建一个空项目并且它发生了。关键问题似乎是它根本没有安装。我想知道微软是否没有按照其他所有内容升级测试框架。在线信息稀少,很难跨版本隔离。
  • 我也看到了未列出的消息,我认为您可能是对的,但它并没有指示要做什么。
  • This:blogs.msdn.microsoft.com/visualstudioalm/2016/05/30/… 告诉我您不应该在 project.json 中直接引用 MSTest.ObjectModel 或 MSTest.TestAdapter.Dotnet,而只能引用 MSTest.TestFramework。我可以看到几天前发布的最新版本nuget.org/packages/MSTest.TestFramework/1.0.5-preview。你试过这个吗?附带说明 - Asp.NET Core 框架项目 (github.com/aspnet) 正在使用 xUnit。
  • 我没有直接参考。添加 dotnet-test-mstest 时会发生错误,因为不兼容的包是它的依赖项。 MStest.Framework 本身并不好,您需要 dotnet-test-mstest 才能运行测试。

标签: .net asp.net-core mstest


【解决方案1】:

我设法通过按照这些说明创建全新项目来完成这项工作...

https://docs.microsoft.com/en-us/dotnet/articles/core/testing/using-mstest-on-windows

似乎需要将 MSTest dotnet 核心项目创建为控制台应用程序才能工作..?

为了帮助所有其他人,这是我最终得到的 project.json。

{
    "version": "1.0.0-*",
    "testRunner": "mstest",

    "dependencies": {
        "dotnet-test-mstest": "1.1.1-preview",
        "MyLibrary": {
            "target": "project"
        },
        "Microsoft.NETCore.App": {
            "type": "platform",
            "version": "1.0.1"
        },
        "MSTest.TestFramework": "1.0.4-preview",
        "NSubstitute": "2.0.0-rc"
    },

    "frameworks": {
        "netcoreapp1.0": {
            "imports": "dnxcore50"
        }
    }
}

我似乎在做两件不同的关键事情。首先,我的关键依赖项以前是...

"NETStandard.Library": "1.6.0"

在新的 project.json 中是

"Microsoft.NETCore.App": {
        "type": "platform",
         "version": "1.0.1"
     }

(在原始 project.json 中,它作为子依赖项放置在文件的 frameworks 部分中)。

另一个位于“newtcoreapp1.0”下的导入部分。在最初的 project.json 中,我使用了它本身,而工作的那个导入了 dnxcore50(尽管我仍然不相信这实际上是正确的)。

MSTest.TestFramework 的 1.0.5 预览版似乎存在一个错误 - 我最终将版本更改为较早的版本。使用 1.0.5 测试会加载,但每个测试都会失败并出现错误...

无法从程序集“Microsoft.VisualStudio.TestPlatform.TestFramework”加载类型“LogMessageHandler”

我四处寻找将其作为错误提交的地方,但还没有运气。如果有人发现它有同样的问题并且知道在哪里记录它,请告诉我,我会为它“+1”。

为了完整起见,这里有一个适用于 NUnit 的 project.json 文件(尽管它是 NUnit 3 并且读取它的输出文件是(在撰写本文时)VSTS 上的一个问题......

{
    "dependencies": {
        "MyLibrary": {
            "target": "project"
        },
        "NETStandard.Library": "1.6.0",
        "NUnit": "3.5.0",
        "dotnet-test-nunit": "3.4.0-beta-1"
    },
    "frameworks": {
        "netcoreapp1.0": {
            "imports": [
                "netcoreapp1.0",
                "portable-net45+win8"
            ],
            "dependencies": {
                "Microsoft.NETCore.App": {
                    "version": "1.0.1-*",
                    "type": "platform"
                },
                "NSubstitute": "2.0.0-rc"
            }
        }
    },
    "testRunner": "nunit",
    "version": "1.0.0-*"
}

这里是 xUnit - 我会更多地使用它,因为它在 VSTS 上似乎更可行......

{
    "version": "1.0.0-*",
    "buildOptions": {
        "debugType": "portable"
    },
    "dependencies": {
        "System.Runtime.Serialization.Primitives": "4.1.1",
        "xunit": "2.1.0",
        "dotnet-test-xunit": "1.0.0-rc2-build10015",
        "NSubstitute": "2.0.0-rc",
        "MyLibrary": {
            "target": "project"
        }

    },
    "testRunner": "xunit",
    "frameworks": {
        "netcoreapp1.0": {
            "dependencies": {
                "Microsoft.NETCore.App": {
                    "type": "platform",
                    "version": "1.0.1"
                }
            },
            "imports": [
                "dotnet5.4",
                "portable-net451+win8"
            ]
        }
    }
}

更多真正有用的 xUnit 信息在这里 - https://docs.microsoft.com/en-us/dotnet/articles/core/testing/unit-testing-with-dotnet-test

总的来说,我发现,一旦考虑到让 VSTS 正常工作,xUnit 远远超过最容易使用的选项 - 您只需设置构建服务器任务以使用 dotnet test 命令行,然后使用发布测试文件任务以显示结果。在经历了很多痛苦之后,我仍然无法让 MS 测试运行在构建服务器上通过。

【讨论】:

  • 您对 MSTest.TestFramework 的 1.0.5-preview 完全正确。正如你所说,我将其更改为 1.0.4,一切正常。我不明白为什么没有关于 .Net Core 的正确文档?他们网站上的一些示例和代码在其他领域也根本不起作用。本教程说我们需要使用“库”而不是“控制台应用程序”。
  • 如果可以选择的话,我强烈推荐使用 xUnit,它远没有试图让 MStest.Framework 最终工作那么痛苦。它具有跨平台的额外好处。
  • 我也支持@TTCG 的评论。有同样的问题
【解决方案2】:

@TTCG 提出的 dotnet-test-mstest 1.1.1-preview 和 MSTest.TestFramework 1.0.5-preview 问题因此已在更高版本中得到修复。随意在 dotnet-test-mstest 1.1.2-preview 和 MSTest.TestFramework 1.0.6-preview 上试用。

【讨论】:

  • 将 dotnet-test-mstest 升级到 1.1.2-preview 解决了这个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
相关资源
最近更新 更多