如何指定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
相关产品推荐
相关产品推荐

