【问题标题】:How do I run a .Net Core 2.1, compiled MsTest unit test assembly from Azure Devops?如何运行 .Net Core 2.1,从 Azure Devops 编译 MsTest 单元测试程序集?
【发布时间】:2019-12-27 16:18:50
【问题描述】:

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

我已尝试使用 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。我必须做些什么才能让它发挥作用?

我试过了:

  • dotnet test 只接受 .csproj,根本不识别 dll
  • dotnet vstest 产生上述错误消息。我试过 /Framework:.NETCoreApp,Version=v2.1 命令行参数,匹配程序集的版本,没有任何区别
  • 具有和不具有上述参数的 VsTest 任务。再次没有区别。

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

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

什么?

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

这怎么会这么难?

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

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

【问题讨论】:

  • 你这里用的是什么代理? Linux?视窗? 2015 年、2017 年、2019 年?托管?私人的?
  • 代理规范是'vs2017-win2016'。这能回答问题吗?
  • 2019代理试过了吗?
  • @jessehouwing 不适用于大多数其他人工制品。为什么这会有所作为?
  • 较新版本的 vstest。随着 2019 年的发布。

标签: azure-devops mstest azure-pipelines vstest


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    像往常一样,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 不会复制到输出文件夹,除非发布绑定到特定平台。

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2011-04-24
      • 2011-07-26
      • 2020-02-06
      • 2020-08-13
      相关资源
      最近更新 更多