由Azure DevOps执行时xUnit测试失败

时间:2019-02-25 15:20:57

标签: azure unit-testing visual-studio-2017 xunit

我正在创建一个非常简单的测试项目,以尝试各种Azure DevOps CI / DI功能。该项目包含一个带有ASP.NET Core网站项目和xUnit单元测试项目的解决方案。单元测试可以在我的本地计算机上正确运行(已通过Visual StudioRunner和dotnet test进行了测试,但是我无法使其与Azure构建一起使用。

Azure中单元测试步骤的输出如下:

##[section]Starting: Test Assemblies
==============================================================================
Task         : Visual Studio Test
Description  : Run unit and functional tests (Selenium, Appium, Coded UI test, etc.) using the Visual Studio Test (VsTest) runner. Test frameworks that have a Visual Studio test adapter such as MsTest, xUnit, NUnit, Chutzpah (for JavaScript tests using QUnit, Mocha and Jasmine), etc. can be run. Tests can be distributed on multiple agents using this task (version 2).
Version      : 2.147.0
Author       : Microsoft Corporation
Help         : [More information](https://go.microsoft.com/fwlink/?LinkId=835764)
==============================================================================
SystemVssConnection exists true
SystemVssConnection exists true
SystemVssConnection exists true
Running tests using vstest.console.exe runner.
======================================================
Test selector : Test assemblies
Test filter criteria : null
Search folder : D:\a\1\s
VisualStudio version selected for test execution : latest
Run in parallel : false
Run in isolation : false
Path to custom adapters : null
Other console options : null
Code coverage enabled : false
Diagnostics enabled : true
SystemVssConnection exists true
Run the tests locally using vstest.console.exe
========================================================
Test selector : Test assemblies
Test assemblies : **\release\netcoreapp2.2\*test*.dll,!**\obj\**
Test filter criteria : null
Search folder : D:\a\1\s
Run settings file : D:\a\1\s
Run in parallel : false
Run in isolation : false
Path to custom adapters : null
Other console options : null
Code coverage enabled : false
Diagnostics enabled : false
Rerun failed tests: false
VisualStudio version selected for test execution : latest
========================================================
======================================================
[command]"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" @D:\a\_temp\e481a311-390d-11e9-aa01-4f08eeab4c37.txt
Microsoft (R) Test Execution Command Line Tool Version 15.9.0
Copyright (c) Microsoft Corporation.  All rights reserved.

vstest.console.exe 
"D:\a\1\s\tests\ContosoUniversity.Tests\bin\Release\netcoreapp2.2\ContosoUniversity.Tests.dll"
"D:\a\1\s\tests\ContosoUniversity.Tests\bin\Release\netcoreapp2.2\xunit.runner.visualstudio.dotnetcore.testadapter.dll"
/logger:"trx"
/TestAdapterPath:"D:\a\1\s"
Starting test execution, please wait...
Test run will use DLL(s) built for framework .NETCoreApp,Version=v2.2 and platform X86. Following DLL(s) do not match framework/platform settings.
xunit.runner.visualstudio.dotnetcore.testadapter.dll is built for Framework 1.0 and Platform AnyCPU.
Go to http://go.microsoft.com/fwlink/?LinkID=236877&clcid=0x409 for more details on managing these settings.

[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.4.1 (64-bit .NET Core 4.6.27207.03)
[xUnit.net 00:00:04.36]   Discovering: ContosoUniversity.Tests
[xUnit.net 00:00:04.43]   Discovered:  ContosoUniversity.Tests
[xUnit.net 00:00:04.44]   Starting:    ContosoUniversity.Tests
[xUnit.net 00:00:04.93]   Finished:    ContosoUniversity.Tests
Passed   ContosoUniversity.Controllers.HomeControllerTest.Index_Renvoie_Le_Bon_Modele
Unable to find D:\a\1\s\tests\ContosoUniversity.Tests\bin\Release\netcoreapp2.2\xunit.runner.visualstudio.dotnetcore.testadapter.deps.json. Make sure test project has a nuget reference of package "Microsoft.NET.Test.Sdk".
Results File: D:\a\1\s\TestResults\VssAdministrator_fv-az561_2019-02-25_14_59_22.trx

Total tests: Unknown. Passed: 1. Failed: 0. Skipped: 0.
Test Run Aborted.
Test execution time: 8.5546 Seconds
##[warning]Vstest failed with error. Check logs for failures. There might be failed tests.
##[error]Error: The process 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe' failed with exit code 1
##[error]VsTest task failed.
##[section]Async Command Start: Publish test results
Publishing test results to test run '1000118'
Test results remaining: 1. Test run id: 1000118
Published Test Run : https://orkeis-proj1.visualstudio.com/MyFirstProject_Test/_TestManagement/Runs#runId=1000118&_a=runCharts
##[section]Async Command End: Publish test results
##[section]Finishing: Test Assemblies

我无法理解我应该如何缺少那个json文件。该错误提示您安装Microsoft.NET.Test.Sdk,但确实在我的项目文件中引用了它:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>

    <IsPackable>false</IsPackable>

    <RootNamespace>ContosoUniversity</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\ContosoUniversity.csproj" />
  </ItemGroup>

</Project>

因此,对于我所缺少的任何提示,将不胜感激。

3 个答案:

答案 0 :(得分:4)

问题在于,用于查找测试程序集(*test*.dll)的默认文件模式也确实包含xUnit的核心程序集(名为xunit.runner.visualstudio.dotnetcore.testadapter.dll),这使测试系统感到困惑。

要解决此问题,我要做的就是使用更特定的模式(例如*tests.dll),或者排除所有测试适配器程序集(!**/*testadapter.dll)。

更新:xUnit的官方文档已更新,可以帮助避免此问题(https://xunit.net/docs/getting-test-results-in-azure-devops

答案 1 :(得分:1)

由于@Shtong,我得以修复xunit管道构建。 这是我的YAML文件,供以后参考:

- task: VSTest@2
  inputs:    
    testAssemblyVer2: |
      **\bin\$(BuildConfiguration)\**\*tests*.dll         
      !**\obj\**
      !**\xunit.runner.visualstudio.testadapter.dll
      !**\xunit.runner.visualstudio.dotnetcore.testadapter.dll
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'
    otherConsoleOptions: '/platform:x64 /Framework:.NETCoreApp,Version=v3.1 /logger:console;verbosity="normal" '

答案 2 :(得分:0)

我有一个类似的问题,solution given by Shtong可以解决。

但是在我的情况下,原因却大不相同,这就是为什么我想在这里分享它。

在我的场景中,A.Tests项目引用B.Tests项目,因为某些测试类继承自B.Tests类。这导致将B.Tests.dll复制到A.Tests.dll位置,从而在vstest中引起了同样的问题。

要摆脱该错误,我从A.Tests.dll文件夹中排除了B.Tests.dll,

!**\A.Tests\**\B.Tests.dll