簡體   English   中英

我可以為dunitx中命名空間中的所有裝置創建通用的設置例程嗎?

[英]Can I create a common setup routine for all fixtures in a namespace in dunitx?

是否可以以這樣的方式使用dunitx中的名稱空間,即名稱空間下的所有測試裝置都被一對安裝/拆卸例程所包圍? (類似於nunit中的SetupFixture屬性, http: //www.nunit.org/index.php?p = setupFixture&r = 2.5.5)。

我嘗試使用以下單位名稱/命名空間:

  • TMyFixtureInitializer類的Tests.MyFixture.pas,具有常見的設置和拆卸方法

  • 用於實際測試類的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.

(類似於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.

但是可能這種解決方案對於您的問題來說太簡單了……我想,您想擁有多個名稱空間……來對它們進行分組。 對不起,對此一無所知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM