我可以为 dunitx 中命名空间中的所有夹具创建一个通用的设置例程吗?


是否可以在

dunitx中使用命名空间,使命名空间下的所有测试夹具都由一对设置/拆卸例程括起来?(类似于 nunit, http://www.nunit.org/index.php?p=setupFixture&r=2.5.5) 中的 SetupFixture 属性)。

我尝试使用以下单元名称/命名空间:

  • Tests.MyFixture.pas 用于 TMyFixtureInitializer 类,具有通用的安装和拆卸方法

  • Tests.MyFixture.MyTestUnit1.pas
  • 和 Tests.MyFixture.MyTestUnit2.pas 用于实际测试类。

我遇到了以下问题:

  • 当类本身不包含任何测试例程时,不会执行 TMyFixtureInitializer.SetupFixture 和 TeardownFixture。

  • 在 TMyFixtureInitializer 中添加虚拟测试后,将调用 SetupFixture 和 TeardownFixture 例程,但在 Tests.MyFixture.MyTestUnit1 和 Tests.MyFixture.MyTestUnit2 中的测试之后

  • 当我在构造函数上设置 SetupFixture 属性,在 TMyFixtureInitializer 的析构函数上设置 TeardownFixture 属性时,它们在所有测试之前和之后执行,完全忽略命名空间。

Tests.MyFixture.pas:

unit Tests.MyFixture;
interface
uses
  DUnitX.TestFramework;
type
  [TestFixture]
  TMyFixtureInitializer = class(TObject)
  public
    [SetupFixture]
    procedure SetupMyFixture;
    [TeardownFixture]
    procedure TeardownMyFixture;
  end;
implementation

{ TMyFixtureInitializer }
procedure TMyFixtureInitializer.SetupMyFixture;
begin
  Self.Log('initialize a lot of stuff ...');
end;
procedure TMyFixtureInitializer.TeardownMyFixture;
begin
  Self.Log('cleanup a lot of stuff ...');
end;
initialization
  TDUnitX.RegisterTestFixture(TMyFixtureInitializer);
end.

Tests.MyFixture.MyTestUnit1.pas:

unit Tests.MyFixture.MyTestUnit1;
interface
uses
  DUnitX.TestFramework;
type
  [TestFixture]
  TestClass1 = class(TObject) 
  public
    [Test]
    procedure Test;
  end;
implementation

{ TestClass1 }
procedure TestClass1.Test;
begin
end;
initialization
  TDUnitX.RegisterTestFixture(TestClass1);
end.

(来源 of Tests.MyFixture.MyTestUnit2.pas 是类似的)。

有没有人有如何使用命名空间来组织初始化和清理的示例?

我直言,在没有任何测试的情况下定义 [TestFixture] 是没有意义的......而且:据我所知,DUnitX 中不支持命名空间。DUnitX只是在一个循环中运行所有夹具(和测试)。

如果您只需要在所有测试之前/之后运行的方法,则可以执行以下操作(相反):

Tests.MyFixture.pas:

unit Tests.MyFixture;
interface
// uses
  //DUnitX.TestFramework;
type
  TMyFixtureInitializer = class(TObject)
  public
    class procedure SetupMyFixture;
    class procedure TeardownMyFixture;
  end;
implementation
{ TMyFixtureInitializer }
class procedure TMyFixtureInitializer.SetupMyFixture;
begin
  //Self.Log('initialize a lot of stuff ...');
end;
class procedure TMyFixtureInitializer.TeardownMyFixture;
begin
  //Self.Log('cleanup a lot of stuff ...');
end;
initialization
  TMyFixtureInitializer.SetupMyFixture;
finalization
  TMyFixtureInitializer.TeardownMyFixture;
end.

但可能,这个解决方案对于你的问题来说太简单了......我想,你想拥有多个命名空间......对他们进行分组。对不起,不知道这个。

相关内容

最新更新