如何禁用 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 你必须:
在我所做的 csproject 的根目录中添加一个 xunit.runner.json
,并且工作正常。 (这在 visual studio 上有效,因为我使用另一个删除测试名称的“_”字符的功能对其进行了测试:[methodDisplay]
)
将 xunit.runner.json 文件配置为始终复制或在 visual studio 中保留最新的,以便将其复制到 bin 文件夹(与任何 appsetings.json 文件一样)
我读到您可以在 assemblyInfo.cs 文件中放置一个程序集属性,顺便说一下,它似乎被普通的 csproj 所取代,所以我有点困惑。
我想要实现的最终目标是,当 devops 使用 dotnet 测试时,集成测试不会因并发问题而崩溃。
在 xUnit 中,ParallelizeAssemblies 的默认值为 false,因此我只能假设 dotnet 测试的行为导致两者一起执行。
尝试并 运行 使用 dotnet vstest 进行测试。这需要构建 DLLS。
dotnet vstest **/*test.dll
我有一个用 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 你必须:
在我所做的 csproject 的根目录中添加一个
xunit.runner.json
,并且工作正常。 (这在 visual studio 上有效,因为我使用另一个删除测试名称的“_”字符的功能对其进行了测试:[methodDisplay]
)将 xunit.runner.json 文件配置为始终复制或在 visual studio 中保留最新的,以便将其复制到 bin 文件夹(与任何 appsetings.json 文件一样)
我读到您可以在 assemblyInfo.cs 文件中放置一个程序集属性,顺便说一下,它似乎被普通的 csproj 所取代,所以我有点困惑。
我想要实现的最终目标是,当 devops 使用 dotnet 测试时,集成测试不会因并发问题而崩溃。
在 xUnit 中,ParallelizeAssemblies 的默认值为 false,因此我只能假设 dotnet 测试的行为导致两者一起执行。
尝试并 运行 使用 dotnet vstest 进行测试。这需要构建 DLLS。
dotnet vstest **/*test.dll