VSTS 测试步骤找不到 xUnit 测试适配器

VSTS test step cannot find xUnit test adapter

我是 CI/CD 的新手,mm 目前正在努力让 VSTS 找到我的 xUnit 测试。我的解决方案是一个纯粹的实验,尝试隔离问题并学习。在进入我的设置和到目前为止所做的工作之前,结果是 VSTS 构建日志中的这一行:

Warning: No test is available in C:\agent\_work\s\Quotifier.Models.xUnit.Test\bin\Release\netcoreapp2.0\Quotifier.Models.xUnit.Test.dll. Make sure that installed test discoverers & executors, platform & framework version settings are appropriate and try again.

通过谷歌搜索消息,我将其解释为 VSTS 无法找到 xUnit 测试适配器。这是一个正确的假设吗?另外,我经常看到术语 "test adapter"、"test runner" 和 "test explorer"。 这两个词是一回事吗? 查了下this article 看来确实是一回事。 谁能解释一下?

现在,我的设置...

xUnit 测试项目是一个引用 NUget 包 xunitxunit.runner.visualstudio (2.2.0) 的 .NET Core 2 class 库。测试项目还引用了一个名为 "Quotifier.Models" 的共享 class 库,其中包含经过测试的代码。

为了更容易诊断我是 运行 我 PC 上的本地(本地)构建代理。这使我能够调查文件结构。

我的构建定义的构建步骤最初是构建整个解决方案的 "Visual Studio Build"。我可以看到生成的二进制文件以

结尾

C:\agent\_work\s\Quotifier.Models.xUnit.Test\bin\Release\netcoreapp2.0。 在二进制文件中还有 xunit.runner.visualstudio.dotnetcore.testadapter.dll这是VSTS找不到的xUnit测试适配器吗?

更多谷歌搜索告诉我,要找到的测试适配器的典型位置是在 $(Build.SourcesDirectory)\packages 文件夹中,因此,这就是测试步骤的 "Path to custom test adapters" 应该设置的位置。这给了我这个日志条目:

Warning: The path 'C:\agent\_work\s\packages' specified in the 'TestAdapterPath' does not contain any test adapters, provide a valid path and try again..

我还检查了那个本地文件夹,实际上,xunit NUget 包并没有在那里。 谁能猜出为什么?

假设 xunit.runner.visualstudio.dotnetcore.testadapter.dll 确实是 VSTS 正在寻找的测试适配器,我想我应该尝试帮助它一下。所以我创建了一个单独的 MSBuild 步骤并通过 "MSBuild arguments":

指定了输出路径

/p:OutputPath="$(build.binariesdirectory)/$(BuildConfiguration)/test-assemblies".

然后我将测试步骤的 "Path to custom test adapters" 属性 设置为指向同一文件夹。这样我就回到了日志中的原始警告:

Warning: No test is available in C:\agent\_work\b\release\test-assemblies\Quotifier.Models.xUnit.Test.dll. Make sure that installed ... bla ... bla

现在,总结一下......

我现在没有想法,所以任何提示、链接或建议都将不胜感激。

使用 "dotnet test" 来 运行 您的 NetCore-UnitTests。 该任务称为“.NET Core”,并有一个命令下拉列表,您可以在其中 select build/restore/test 等...如果您使用的是托管代理,您还需要添加 "NET Core Tool Installer"

并且您的 xunit 包不应该在 "packages" 目录中结束。 netcore2 项目以不同方式处理 nuget-packages 并将从本地 nuget-cache

引用它们