问题描述
我有一个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
来选择项目。我对照此解决方案对此进行了测试,它的工作原理是:
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)'