我如何 运行 .Net Core 2.1,从 Azure Devops 编译的 MsTest 单元测试程序集?

How do I run a .Net Core 2.1, compiled MsTest unit test assembly from Azure Devops?

我有一个生成输出的解决方案构建,其中有一个单元测试程序集。

我已经在这个程序集中尝试了 VsTest 和 dotnet 测试管道任务来 运行 测试。我能想到的每一种参数组合都会产生(匿名路径):

Unable to find MyProject\MyTests.deps.json. Make sure test project has a nuget reference of package "Microsoft.NET.Test.Sdk".

它确实引用了 Microsoft.NET.Test.Sdk。我需要做什么才能让它发挥作用?

我试过:

编辑:我意识到我忽略了在构建工件中包含 *.deps.json 文件。提供这些产生了一个新错误:

Unable to find MyProject\testhost.dll. Please publish your test project and retry.

什么?

编辑 #2:我已经在相关的构建管道中发布了 .csproj,并且 运行 后续步骤将生成的文件夹中的所有内容复制到构建工件。这没有任何区别。

怎么会这么难?

编辑 #3:为了更清楚地解释,我想要实现的是 运行 SpecFlow 测试,在我的发布管道期间用 .net 核心程序集编写。我不能在构建管道中 运行 它们,因为它们是对已部署工件进行测试的集成测试,而这些工件直到发布管道结束时才被部署。我不认为我可以执行 解释的模式,因为发布的工件是编译的项目输出并且代码不再在范围内。

为什么我不能 运行 像 Visual Studio 那样从程序集进行测试?这些测试在 VS2017 和 VS2019 中运行良好。

你能在你的 specflow 测试工件中找到 <project>.runtimeconfig.dev.json 吗?此文件的存在会导致 testhost.dll 未找到错误。由于此文件中定义的 ProbingPaths 指向构建主机的位置。并且测试在发布主机中 运行,如 this page 中所述,您可以从工件中删除此文件并试一试。

但是我尝试了我的演示项目,但它对我不起作用,因为发布机器中不存在依赖包。

我 运行 我的演示 specflow 按照以下步骤测试成功。希望对您有所帮助。

1,我添加了dotnet push task来发布演示项目。

2,并使用Publish build Artifacts任务将结果工件发布到发布管道。

3,在我的发布管道中。我将 Vstest 任务添加到 运行 测试程序集。演示测试运行成功

像往常一样,PEBKAC(键盘和椅子之间存在问题)。

我错误地获取了 bin/Debug 文件夹的内容,而不是包含所有必需框架程序集的 /publish 子文件夹的内容。

这暴露了另一个问题:

An assembly specified in the application dependencies manifest (MyProject.deps.json) was not found: 2019-08-27T16:12:11.5536355Z package: 'System.Private.ServiceModel', version: '4.5.3'

通过将参数 -r win_x64 传递给 dotnet publish 解决了这个问题。 System.ServiceModel 依赖于平台,因此除非发布绑定到特定平台,否则不会将支持 ServiceModel 的特定平台 dll 复制到输出文件夹。