如何在Azure DevOps管道内置的解决方案中同时包含xUnit和NUnit?

问题描述

我有一个C#解决方案,其中有几个使用xUnit的单元测试项目和一个使用NUnit的“端到端”测试项目。 (这是故意的,很好,所以我很感激不要试图说服我放弃另一个,谢谢)

我使用Azure DevOps管道来构建,测试和打包我的解决方案。这是我目前的测试步骤(来自azure-pipelines.yml):

- task: DotNetCoreCLI@2
  displayName: 'Run tests in solution'
  inputs:
    command: 'test'
    arguments: '--configuration $(buildConfiguration) --collect "Code coverage" --filter Category!=Integration'
    publishTestResults: true

运行此命令时,管道失败,并显示以下错误消息:

调用执行程序'executor:// nunit3testexecutor /'时发生异常:选择表达式中位置29的意外单词'Category'。

我很确定会发生这种情况,因为NUnit正在被使用,并且它不理解Category过滤条件。 (NUnit期望使用术语TestCategory来代替)

我试图通过这种方式使管道不接收NUnit项目(称为“ EndToEnd”):

--filter FullyQualifiedname!~EndToEnd&Category!=Integration'

但是这不起作用,并且我得到相同的错误消息。

如何才能使Azure DevOps Pipelines在此步骤中仅在xUnit项目中运行测试,而不会由于NUnit项目的存在而失败?

解决方法

您可以使用projects来选择项目。我对照此解决方案对此进行了测试,它的工作原理是: enter image description here

variables:
  buildConfiguration: 'Release'
  rootDirectory: '$(Build.SourcesDirectory)/stackoverflow/69-nunit-and-xunit'

steps:

- task: DotNetCoreCLI@2
  displayName: Restore nuget packages
  inputs:
    command: restore
    projects: '**/*.csproj'
    workingDirectory: $(rootDirectory)

- task: DotNetCoreCLI@2
  displayName: Test xUnit
  inputs:
    command: test
    projects: '$(rootDirectory)/**/*XUnit.csproj'
    arguments: '--configuration $(buildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: Test NUnit
  inputs:
    command: test
    projects: '$(rootDirectory)/**/*NUnit.csproj'
    arguments: '--configuration $(buildConfiguration)'