【发布时间】:2017-11-02 08:27:53
【问题描述】:
我对 CI/CD 很陌生,mm 目前正在努力让 VSTS 找到我的 xUnit 测试。我的解决方案是一个纯粹的实验,尝试隔离问题并学习。在进入我的设置以及到目前为止所做的工作之前,结果是 VSTS 构建日志中的这一行:
Warning: No test is available in C:\agent\_work\1\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 测试适配器。这是一个正确的假设吗?另外,我经常看到术语“测试适配器”、“测试运行器”和“测试资源管理器”。 这些术语是一回事吗?查看了this article,它们似乎确实是一回事。 谁能澄清一下?
现在,我的设置...
xUnit 测试项目是一个引用 NUget 包 xunit 和 xunit.runner.visualstudio (2.2.0) 的 .NET Core 2 类库。测试项目还引用了一个名为“Quotifier.Models”的共享类库,其中包含测试代码。
为了更容易诊断,我正在我的 PC 上运行本地(本地)构建代理。这使我能够调查文件结构。
我的构建定义的构建步骤最初是构建整个解决方案的“Visual Studio 构建”。我可以看到生成的二进制文件最终出现在
C:\agent\_work\1\s\Quotifier.Models.xUnit.Test\bin\Release\netcoreapp2.0。
二进制文件中还有xunit.runner.visualstudio.dotnetcore.testadapter.dll。 这是 xUnit 测试适配器 VSTS 找不到吗?
更多谷歌搜索告诉我,要找到测试适配器的典型位置是在 $(Build.SourcesDirectory)\packages 文件夹中,因此,这就是测试步骤的“自定义测试适配器路径”应该设置的位置。这给了我这个日志条目:
Warning: The path 'C:\agent\_work\1\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 参数”指定了输出路径:
/p:OutputPath="$(build.binariesdirectory)/$(BuildConfiguration)/test-assemblies"。
然后我将测试步骤的“自定义测试适配器的路径”属性设置为指向同一个文件夹。有了这个,我又回到了日志中的原始警告:
Warning: No test is available in C:\agent\_work\1\b\release\test-assemblies\Quotifier.Models.xUnit.Test.dll. Make sure that installed ... bla ... bla
现在,总结一下……
- 开箱即用的 xUnit 测试项目不适用于 VSTS
- xUnit NUget 包最终不在 /**/packages 文件夹中
- 我假设
xunit.runner.visualstudio.dotnetcore.testadapter.dll是所需的测试适配器。这个假设正确吗?
我现在没有想法,所以任何提示、链接或建议将不胜感激。
【问题讨论】:
-
你可以用 VSTS 做到这一点。您是使用“VSTEST”任务来运行您的任务还是“dotnet test”?如果测试是 netcore2 项目,您应该使用“dotnet test”运行测试
-
而且你的 xunit-packages 不应该出现在“packages”目录中。 netcore2 项目以不同方式处理 nuget-packages,并将从本地 nuget-cache 引用它们
-
我找不到名为“dotnet test”的测试步骤。我还检查了 VSTS“市场”,但仍然没有这样的步骤可用。我在哪里可以找到该步骤?
-
该任务称为“.NET Core”,并有一个命令下拉菜单,您可以在其中选择构建/恢复/测试等...如果您使用的是“NET Core Tool Installer”,还需要添加托管代理
-
运行 dotnet 测试步骤成功了!它现在找到了测试,我可以看到它们在日志中传递。继续写一个回复,以便我可以将其标记为答案。 :-) 另外:有没有办法产生测试和代码覆盖率结果?我尝试添加参数 --results-directory $(Build.SourcesDirectory)\TestResults 但没有创建或填充这样的目录。
标签: .net-core azure-pipelines xunit