【发布时间】:2020-09-01 09:16:49
【问题描述】:
我有一个用 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 test”以避免死锁时,我想禁用 dll 的并行执行,所以我搜索它并且文档说要禁用 dll 的并行执行,你必须:
-
在我所做的 csproject 的根目录中添加
xunit.runner.json并且工作正常。 (这是在 Visual Studio 上工作的,因为我使用另一个删除测试名称的“_”字符的功能对其进行了测试:[methodDisplay]) -
将 xunit.runner.json 文件配置为始终复制或在 Visual Studio 中保留最新版本,以便在 bin 文件夹中复制(与任何 appsetings.json 文件一样)
我读到你可以在 assemblyInfo.cs 文件中放置一个程序集属性,顺便说一下,它似乎被普通的 csproj 替换了,所以我有点困惑。
我想要实现的最终目标是,当 devops 使用 dotnet 测试时,集成测试不会因并发问题而崩溃。
【问题讨论】:
-
您是否尝试阅读现有问题? Execute unit tests serially (rather than in parallel) 在代码中的某处添加这一行
[assembly: CollectionBehavior(DisableTestParallelization = true)]可能会解决您的问题 -
嗨!,不幸的是,没有,因为这个答案旨在配置测试集合并行化,以及我想确保一个程序集不会与另一个程序集并行运行。我可以在同一个程序集中拥有多个测试集合。
-
看来您需要禁用此处回答的测试并行化:stackoverflow.com/questions/1408175/…。微软在 roslyn 测试中做同样的事情:github.com/dotnet/roslyn/blob/master/eng/config/…
标签: c# .net-core integration-testing devops xunit