运行 xunit.net 在 VSTS 中测试

Running xunit.net tests in VSTS

我在 VSTS 运行 xunit.net 测试中遇到问题。当 运行 构建计划时,Test assemblies 步骤生成以下日志:

2017-03-21T12:11:39.3302859Z ##[section]Starting: Test Assemblies
2017-03-21T12:11:39.3382932Z ==============================================================================
2017-03-21T12:11:39.3382932Z Task : Visual Studio Test
2017-03-21T12:11:39.3382932Z Description : Run tests with Visual Studio test runner
2017-03-21T12:11:39.3382932Z Version : 1.0.84
2017-03-21T12:11:39.3382932Z Author : Microsoft Corporation
2017-03-21T12:11:39.3382932Z Help : More Information
2017-03-21T12:11:39.3382932Z ==============================================================================
2017-03-21T12:11:39.3493151Z Preparing task execution handler.
2017-03-21T12:11:44.9245238Z Executing the powershell script: D:\a_tasks\VSTest_ef087383-ee5e-42c7-9a53-ab56c98420f9.0.84\VSTest.ps1
2017-03-21T12:11:46.6530959Z Testing container: 'REGISTRY::HKEY_CLASSES_ROOT\CLSID{177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D}'
2017-03-21T12:11:46.6530959Z
2017-03-21T12:11:46.6530959Z
2017-03-21T12:11:46.6810971Z Does not exist.
2017-03-21T12:11:46.6820975Z
2017-03-21T12:11:46.6820975Z
2017-03-21T12:11:46.8520939Z Working folder: D:\a\s
2017-03-21T12:11:46.8520939Z Executing C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe "D:\a\s\Common.Tests\bin\Release\MyClassLibrary.Tests.dll" /Settings:"C:\Users\buildguest\AppData\Local\Temp\tmp89AE.tmp" /EnableCodeCoverage /logger:trx /TestAdapterPath:"D:\a\s"
2017-03-21T12:11:47.2730887Z Microsoft (R) Test Execution Command Line Tool Version 14.0.25420.1
2017-03-21T12:11:47.2740881Z Copyright (c) Microsoft Corporation. All rights reserved.
2017-03-21T12:11:47.2740881Z
2017-03-21T12:11:47.7430814Z Starting test execution, please wait...
2017-03-21T12:12:01.0768912Z Warning: [xUnit.net 00:00:01.1926376] Skipping: MyClassLibrary.Tests (Could not find any of the following assemblies: xunit.execution.desktop.dll)
2017-03-21T12:12:01.0768912Z
2017-03-21T12:12:01.1458970Z Warning: No test is available in D:\a\s\Common.Tests\bin\Release\MyClassLibrary.Tests.dll. Make sure that installed test discoverers & executors, platform & framework version settings are appropriate and try again.

这个项目的 packages.config 文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  ...
  <package id="xunit" version="2.2.0" targetFramework="net45" />
  <package id="xunit.abstractions" version="2.0.1" targetFramework="net45" />
  <package id="xunit.assert" version="2.2.0" targetFramework="net45" />
  <package id="xunit.core" version="2.2.0" targetFramework="net45" />
  <package id="xunit.extensibility.core" version="2.2.0" targetFramework="net45" />
  <package id="xunit.extensibility.execution" version="2.2.0" targetFramework="net45" />
  <package id="xunit.runner.msbuild" version="2.1.0" targetFramework="net45" />
  <package id="xunit.runner.visualstudio" version="2.2.0" targetFramework="net45" developmentDependency="true" />
</packages>

Test assemblies 构建步骤中使用的值:

执行选项

测试程序集:**\*Tests.dll;-:**\obj\**
启用代码覆盖率:true

高级执行选项

VS 测试:Version
VSTest 版本:Latest

自定义适配器的路径为空,但工具提示显示 Nuget restored adapters are automatically searched for.

报告选项

平台:$(BuildPlatform)
配置:$(BuildConfiguration)

所以(在我看来)它似乎可以找到正确的文件 (MyClassLibrary.Tests.dll),但没有选择测试方法(标记为 [Fact][Theory]).

有人知道我做错了什么吗?

更新

解决方案中的所有项目都是.NET 4.5

我在切换到 xUnit 后遇到了同样的问题,经过大量的反复试验和搜索,我发现 xUnit 测试 运行ner 只能 运行程序集针对.NET 4.5.2或以上版本,否则无法加载(因此无法找到测试)。

文档在这里有点模糊,因为 Getting Started with xUnit 指南并没有真正提到这一点,它只提到创建一个新的 class 库项目 "targeting .NET 4.5.2 (or later)".

但这仅适用于包含实际测试的程序集,您正在测试的项目仍然可以面向 .NET 4.5。在我的例子中,我只是将我的测试程序集切换到目标 .NET 4.5.2,但所有其他项目仍然以 .NET 4.5 为目标并且它工作得很好。

只是对此进行了更新,因为我最近也遇到了这个问题,无法让 VsTest 运行器发现我的 .net Core 2.0 xunit 测试。

注意:VsTest runner 在我的机器上本地运行良好,但在 VSTS 中运行不正常 - 即使存在 xunit 测试适配器。

无论如何,改用 .NET Core 构建任务 - 它非常易于使用。基本上:

  1. 添加 .Net Core 构建任务(预览 atm)
  2. Select 所需的 .NET Core 版本
  3. 将命令更改为测试
  4. 为您的测试项目添加一个或多个路径 - 例如**/*Tests.csproj
  5. 任何附加参数 - 例如 --filter "Category!=Integration"
  6. 还有一个将创建 trx 输出文件的发布测试结果选项