【问题标题】:Cant run xunit tests in parallel when classes are inheriting some class当类继承某个类时,无法并行运行 xunit 测试
【发布时间】:2019-08-13 17:44:35
【问题描述】:

无法并行运行 xunit 测试

  1. 创建了 2 个类,其中包含仅休眠和返回的无意义测试。然后继承自一个空的基类。测试并行运行。

  2. 将 2 个类更改为从我需要使用的真实基类继承,其中包含方法和一些常量,并且测试不再并行运行。

我继承的基类不包含任何与测试相关的代码(所有事实注释函数都在子类中)。

我将 xUnit 2.4.1 与 C# 和 .Net 4.7.2 一起使用

我怀疑基类中有一些东西禁止并行运行,但不明白是什么。我有几个使用自动生成的 REST 客户端的异步方法。

【问题讨论】:

  • 请发布相关代码而不是试图解释它。
  • 您如何确定测试是否并行运行?
  • 我知道它们是并行运行的,因为 Visual Studio 中有两个测试运行的动画,并且测试在 5 秒后完成,每个测试都有 5 秒的睡眠时间。

标签: c# xunit


【解决方案1】:

来自文档:

xUnit.net 如何决定哪些测试可以在 平行线?它使用一个名为 test collections 的概念来实现 决定。

默认情况下,每个测试类都是唯一的测试集合。内测试 同一个测试类不会相互并行运行。

不同的类/类型可以并行执行。即使类派生于某个基类,它仍然被视为不同的类。

但测试由 Visual Studio 执行,默认情况下测试在单线程上执行。检查,您是否在 Visual Studio 测试资源管理器中启用了并行测试功能?

可以肯定的是,通过在没有 Visual Studio 的情况下运行测试,我能够执行不同类的测试,这些类并行派生自一个基类。

更新

如果测试类派生的类包含自己的测试方法,则继承的方法将作为当前类的一部分运行,因此不会与当前类的方法并行运行。

但派生类测试方法将作为该特定类的一部分执行,并将与派生自它的其他类并行运行。
在这种情况下,您应该观察到这些方法被执行两次,一次作为“基”类的一部分,另一次作为派生类的一部分。

【讨论】:

  • 是的,我启用了并行运行测试,并且能够并行运行简单的测试,即使扩展了一个通用的基类。但是,当这两个类扩展某些特定类时,即使我没有在扩展类中使用从该基类继承的任何东西,它也会停止工作。这个基类也在扩展另一个类,等等。那些包含一些异步方法和 DI。我正在寻找一些方向,看看这些会导致 xunit 不能并行运行测试。
猜你喜欢
  • 2019-10-08
  • 1970-01-01
  • 2020-04-07
  • 2012-02-24
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多