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

时间:2016-03-20 17:12:22

标签: unit-testing delphi namespaces dunitx

是否可以在dunitx中使用命名空间,以便命名空间下的所有测试装置都被一对安装/拆卸例程包围? (类似于nunit中的SetupFixture属性,http://www.nunit.org/index.php?p=setupFixture&r=2.5.5)。

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

  • Tests.MyFixture.pas用于TMyFixtureInitializer类,具有常见的设置和拆卸方法

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

我遇到了以下问题:

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

  • 在TMyFixtureInitializer中添加虚拟测试后,调用SetupFixture和TeardownFixture例程,但 .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.

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

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

1 个答案:

答案 0 :(得分:0)

Imho,在没有任何测试的情况下定义[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.

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