nunit 3 中的 test "descendants" 是什么?

What are test "descendants" in nunit 3?

阅读 the NUnit 3 documentation regarding test parallelization 后,我承认我对并行测试 运行 的“后代”感到困惑。在我看来,有些情况下我希望所有标记为 [Test] 到 运行 的方法彼此并行,以及与不同测试夹具 类 中的其他方法并行。例如:

[TestFixture]
[Parallelizable(ParallelScope.All)]
class FixtureA
{
    [Test] public void TestCaseA_One() {}
    [Test] public void TestCaseA_Two() {}
}

[TestFixture]
[Parallelizable(ParallelScope.All)]
class FixtureB
{
    [Test] public void TestCaseB_One() {}
    [Test] public void TestCaseB_Two() {}
}

我上面的期望是所有 4 个测试用例方法 运行 并行而不考虑彼此。如果不清楚什么是“后代”(坦率地说,nunit 如何构建测试,这可能是理解这一点所必需的),我不确定会发生什么。所以我的问题是:

  1. 此处是否需要 ParallelScope.All 才能获得我正在寻找的效果?还是使用 [Parallelizable]?
  2. 就足够了?
  3. 上面例子中的“后代”是什么?我假设测试夹具 本身 没有 material 目的;这最终归结为要执行的方法的简单列表。
  4. 后代意味着等级制度; nunit 测试层次结构是什么样的?我可以看到 类 如何构建测试层次结构(继承,但你为什么要这样做?),但方法如何成为“后代”?总的来说,我猜只是对测试结构感到困惑。

简短回答:它与您在测试中使用继承无关。 :-)

更长:

NUnit 是一个 xunit-style 框架,如 SUnit、JUnit、xUnit.net、MbUnit 等

xunit 的基本设计模式是 well-known 复合模式。也就是说,“测试”是一个单独的测试用例 多个测试的组合。所以,如果我们采用以下代码...

namespace My.Tests
{
    public class SomeFixture
    {
        [Test]
        public void SimpleTest() { }

        [TestCase(1, 2, 3)]
        [TestCase(4, 5, 6)]
        [TestCase(7, 8, 9)]
        public void ParameterizedTest(int x, int y, int z);
    }
}

...以下每一项都是NUnit中的“测试”...

  1. 我的
  2. My.Tests
  3. My.Tests.SomeFixture
  4. My.Tests.SomeFixture.SimpleTest
  5. My.Tests.SomeFixture.ParameterizedTest
  6. My.Tests.SomeFixture.ParameterizedTest(1,2,3)
  7. My.Tests.SomeFixture.ParameterizedTest(4,5,6)
  8. My.Tests.SomeFixture.ParameterizedTest(7,8,9)

项目 1、2、3 和 5 有后代。第 4、6、7 和 8 项没有。

例如,ParameterizedTest(1,2,3) 是 ParameterizedTest 的后代, 它是 SomeFixture 的后代,它是 My.Tests 的后代, 这是我的后代。另外,组装本身就是一个测试 我列出的所有内容都来自程序集。

将这些人称为“后代”是相当普遍的,尽管这很容易 与该术语的 O-O 用法混淆。事实上,这个词来源于 事实上,继承被内部用于实现模式。但这对用户来说是不可见的,考虑“包含测试”而不是“依赖测试”可能更有用。

但是请注意,较高级别的测试确实“依赖于”较低级别的测试,因为除非较低级别通过,否则较高级别无法通过。

更新 -

[Parallelizable] 等同于 [Parallelizable(ParallelScope.Self)]

在您编写代码时,两个固定装置可能 运行 彼此并行 并且 成员测试也可能 运行 并行。

如果您将属性更改为 [Parallelizable],则固定装置将 运行 并行,而成员在每个固定装置内按顺序 运行 进行测试。