You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定DUNITX测试框架中测试用例的执行顺序?

DUnitX自定义测试执行顺序的解决方案

DUnitX默认会随机执行测试用例以保证测试独立性,但确实支持自定义执行顺序,以下是两种可行方案:

方法一:使用[Order]属性指定顺序

直接给每个测试方法添加[Order(N)]属性,通过数字控制执行优先级,数字越小越先执行,完全匹配你想要的代码定义顺序:

[TestFixture]
TestTTest = class(TObject)
strict private
public
  /// <summary>
  /// called before executing a test case
  /// </summary>
  procedure SetUp;
  /// <summary>
  /// called after executing a test case
  /// </summary>
  procedure TearDown;

  [Test]
  [Order(1)]
  procedure TestCreate;

  [Test]
  [Order(2)]
  procedure TestA;

  [Test]
  [Order(3)]
  procedure TestB;

  [Test]
  [Order(4)]
  procedure TestObjectsDelete;
end;

添加后测试框架会严格按照Order指定的数字顺序执行用例。

方法二:实现ITestFixtureOrder接口自定义排序逻辑

如果需要更灵活的排序规则(比如动态调整、按自定义规则排序),可以让测试类实现ITestFixtureOrder接口,重写排序方法:

首先引用DUnitX.Extensibility单元,再修改测试类:

uses
  DUnitX.Extensibility;

[TestFixture]
TestTTest = class(TObject, ITestFixtureOrder)
strict private
public
  /// <summary>
  /// called before executing a test case
  /// </summary>
  procedure SetUp;
  /// <summary>
  /// called after executing a test case
  /// </summary>
  procedure TearDown;

  [Test]
  procedure TestCreate;

  [Test]
  procedure TestA;

  [Test]
  procedure TestB;

  [Test]
  procedure TestObjectsDelete;

  // 实现ITestFixtureOrder接口方法
  function OrderTests(const tests: IReadOnlyList<ITest>): IReadOnlyList<ITest>;
end;

function TestTTest.OrderTests(const tests: IReadOnlyList<ITest>): IReadOnlyList<ITest>;
begin
  // 直接返回原顺序,即代码声明顺序
  Result := tests;
  
  // 若需其他规则,可在此排序后返回,比如按方法名排序:
  // Result := tests.OrderBy(function(const t: ITest): string
  //                        begin
  //                          Result := t.MethodName;
  //                        end).ToReadOnlyList;
end;

这种方式适合需要动态调整顺序的场景,若只是要代码定义的顺序,第一种方法更直接简便。

内容的提问来源于stack exchange,提问作者Franz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:36:00