Skip to content

Commit 8477b61

Browse files
Added ability to get the current test name in a test
1 parent 030dc73 commit 8477b61

File tree

4 files changed

+55
-20
lines changed

4 files changed

+55
-20
lines changed

Source/DUnitX.DUnitCompatibility.pas

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ TTestCase = class
4545
protected
4646
procedure SetUp; virtual;
4747
procedure TearDown; virtual;
48+
function TestName : string;
4849
public
4950
procedure Check(const condition: Boolean; const msg: string = '');deprecated 'Use DUnitX.Assert class';
5051
procedure CheckTrue(const condition: Boolean; const msg: string = '');deprecated 'Use DUnitX.Assert class';
@@ -153,6 +154,11 @@ procedure TTestCase.CheckTrue(const condition: Boolean; const msg: string);
153154
Assert.IsTrue(condition,msg);
154155
end;
155156

157+
function TTestCase.TestName: string;
158+
begin
159+
result := TDUnitXTestRunner.GetCurrentTestName;
160+
end;
161+
156162
procedure TTestCase.SetUp;
157163
begin
158164

Source/DUnitX.TestFramework.pas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,8 @@ TTestFixtureInfoList = class(TDUnitXList<ITestFixtureInfo>, ITestFixtureInfoLi
490490
function GetFailsOnNoAsserts : boolean;
491491
procedure SetFailsOnNoAsserts(const value : boolean);
492492

493+
function CurrentTestName : string;
494+
493495
//This is exposed for the GUI Runner cast as ITestFixtureList.
494496
function BuildFixtures : IInterface;
495497

@@ -503,7 +505,6 @@ TTestFixtureInfoList = class(TDUnitXList<ITestFixtureInfo>, ITestFixtureInfoLi
503505
procedure WriteLn(const msg : string);overload;
504506
procedure WriteLn;overload;
505507

506-
507508
/// <summary>
508509
/// When true, test fixtures will be found by using RTTI to search for
509510
/// classes decorated as TestFixtures.  Note for this to work you may

Source/DUnitX.TestRunner.pas

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ TDUnitXTestRunner = class(TWeakReferencedObject, ITestRunner)
6868
FLogMessagesEx : TLogMessageArray;
6969

7070
FFailsOnNoAsserts : boolean;
71-
71+
FCurrentTestName : string;
7272
protected
7373
procedure CountAndFilterTests(const fixtureList: ITestFixtureList; var count, active: Cardinal);
7474
//Logger calls - sequence ordered
@@ -142,6 +142,7 @@ TDUnitXTestRunner = class(TWeakReferencedObject, ITestRunner)
142142
//redirects WriteLn to our loggers.
143143
procedure WriteLn(const msg: string); overload;
144144
procedure WriteLn; overload;
145+
function CurrentTestName : string;
145146

146147
//internals
147148
procedure RTTIDiscoverFixtureClasses;
@@ -162,6 +163,7 @@ TDUnitXTestRunner = class(TWeakReferencedObject, ITestRunner)
162163
constructor Create(const AListeners: array of ITestLogger); overload;
163164
destructor Destroy; override;
164165
class function GetActiveRunner: ITestRunner;
166+
class function GetCurrentTestName : string;
165167
end;
166168

167169
implementation
@@ -378,6 +380,11 @@ function TDUnitXTestRunner.CreateFixture(const AInstance : TObject;const AFixtur
378380
end;
379381

380382

383+
function TDUnitXTestRunner.CurrentTestName: string;
384+
begin
385+
result := FCurrentTestName;
386+
end;
387+
381388
destructor TDUnitXTestRunner.Destroy;
382389
var
383390
tId: TThreadID;
@@ -632,6 +639,15 @@ class function TDUnitXTestRunner.GetActiveRunner: ITestRunner;
632639
result := ref.Data;
633640
end;
634641

642+
class function TDUnitXTestRunner.GetCurrentTestName: string;
643+
var
644+
runner : ITestRunner;
645+
begin
646+
runner := GetActiveRunner;
647+
if runner <> nil then
648+
result := runner.CurrentTestName;
649+
end;
650+
635651
function TDUnitXTestRunner.GetFailsOnNoAsserts: boolean;
636652
begin
637653
Result := FFailsOnNoAsserts;
@@ -745,27 +761,32 @@ function TDUnitXTestRunner.ExecuteTest(const context: ITestExecuteContext; const
745761
begin
746762
FLogMessages.Clear;
747763
SetLength(FLogMessagesEx, 0);
748-
Self.Loggers_ExecuteTest(threadId, test as ITestInfo);
749-
assertBeforeCount := 0;//to shut the compiler up;
750-
if FFailsOnNoAsserts then
751-
assertBeforeCount := TDUnitX.GetAssertCount(threadId);
752-
memoryAllocationProvider.PreTest;
764+
FCurrentTestName := test.Name;
753765
try
754-
testExecute.Execute(context);
755-
finally
756-
memoryAllocationProvider.PostTest;
757-
end;
766+
Self.Loggers_ExecuteTest(threadId, test as ITestInfo);
767+
assertBeforeCount := 0;//to shut the compiler up;
768+
if FFailsOnNoAsserts then
769+
assertBeforeCount := TDUnitX.GetAssertCount(threadId);
770+
memoryAllocationProvider.PreTest;
771+
try
772+
testExecute.Execute(context);
773+
finally
774+
memoryAllocationProvider.PostTest;
775+
end;
758776

759-
if FFailsOnNoAsserts then
760-
begin
761-
assertAfterCount := TDUnitX.GetAssertCount(threadId);
762-
if (assertBeforeCount = assertAfterCount) then
763-
raise ENoAssertionsMade.Create(SNoAssertions);
764-
end;
777+
if FFailsOnNoAsserts then
778+
begin
779+
assertAfterCount := TDUnitX.GetAssertCount(threadId);
780+
if (assertBeforeCount = assertAfterCount) then
781+
raise ENoAssertionsMade.Create(SNoAssertions);
782+
end;
765783

766-
Result := ExecuteSuccessfulResult(context, threadId, test, FLogMessages.Text, FLogMessagesEx);
767-
FLogMessages.Clear;
768-
SetLength(FLogMessagesEx, 0);
784+
Result := ExecuteSuccessfulResult(context, threadId, test, FLogMessages.Text, FLogMessagesEx);
785+
FLogMessages.Clear;
786+
SetLength(FLogMessagesEx, 0);
787+
finally
788+
FCurrentTestName := '';
789+
end;
769790
end
770791
else
771792
begin

Tests/DUnitX.Tests.DUnitCompatibility.pas

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ TMyDUnitTestSetup = class(TTestCase)
4848
procedure TearDown; override;
4949
published
5050
procedure ATest;
51+
procedure Test_TestName;
5152
end;
5253

5354

@@ -84,6 +85,12 @@ procedure TMyDUnitTestSetup.TearDown;
8485
inherited;
8586
end;
8687

88+
procedure TMyDUnitTestSetup.Test_TestName;
89+
begin
90+
Status('The Test Name is : ' + Self.TestName);
91+
CheckEqualsString('Test_TestName', Self.TestName,'TestName not working');
92+
end;
93+
8794
initialization
8895
TDUnitX.RegisterTestFixture(TMyDUnitTest);
8996
TDUnitX.RegisterTestFixture(TMyDUnitTestSetup);

0 commit comments

Comments
 (0)