[英]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.