如何禁用 xunit 程序集的并行化

How to disable parallelization of xunit assemblies

我有一个用 c#、.netcore 2.2 编写的解决方案,测试框架是 xunit,看起来很像这样:

-src

  --controllers

  --services

-test

  --controllers.integrationtest

  --services.integratiotest

我们正在对两个使用相同数据库 (solutionname.test)

的不同 dll (controllers.integrationtest.dll & services.integrationtest) 执行一些集成测试

现在,当我 运行 "dotnet test" 解决方案时,似乎两个 dll 试图访问相同的资源(数据库)并且一个 dll 陷入死锁。

问题是我想在 运行“dotnet 测试”时禁用 dll 的并行执行以避免死锁,所以我搜索了一下,文档说禁用并行执行dll 你必须:

  1. 在我所做的 csproject 的根目录中添加一个 xunit.runner.json,并且工作正常。 (这在 visual studio 上有效,因为我使用另一个删除测试名称的“_”字符的功能对其进行了测试:[methodDisplay]

  2. 将 xunit.runner.json 文件配置为始终复制或在 visual studio 中保留最新的,以便将其复制到 bin 文件夹(与任何 appsetings.json 文件一样)

我读到您可以在 assemblyInfo.cs 文件中放置一个程序集属性,顺便说一下,它似乎被普通的 csproj 所取代,所以我有点困惑。

我想要实现的最终目标是,当 devops 使用 dotnet 测试时,集成测试不会因并发问题而崩溃。

在 xUnit 中,ParallelizeAssemblies 的默认值为 false,因此我只能假设 dotnet 测试的行为导致两者一起执行。

尝试并 运行 使用 dotnet vstest 进行测试。这需要构建 DLLS。

dotnet vstest **/*test.dll