Delphi DunitX,我如何获得当前运行的测试的名称



如何获取当前在DunitX中运行的测试的名称?

例如:

procedure TestModule.TestProcedure;
begin
Assert.Pass('This tests name is ' + TestName);
end

您需要创建一个ITestLogger的实例,并将其添加到当前运行程序中:

TDUnitX.CurrentRunner().AddLogger(myLogger);

ITestLogger有很多方法可以读取大量详细信息。DUnitX提供了各种记录器,但这里没有真正适合我们用例的东西。

我建议

  1. 创建一个新类,从TDUnitXNullLogger派生自DUnitX.Loggers.Null
  2. 覆盖虚拟方法procedure OnBeginTest(const threadId: TThreadID; const Test: ITestInfo);
  3. 保存Test.MethodName以备将来使用

可以在测试用例的SetUpFixture方法中创建新类的实例。

注意:你可以将你的记录器添加到TDUnitX.CurrentRunner()中,但我没有找到在不再需要它时删除它的公共方法。

以下是完整的示例:

unit Unit1;
interface uses DUnitX.TestFramework;
type
[TestFixture]
TMyTest = class
private var
myLogger: ITestLogger;
protected
function getCurrentTestName(): String;
public
[SetupFixture] procedure SetupFixture();
[Test] procedure TestName();
end;
implementation uses DUnitX.Loggers.Null;
type
TMyLogger = class(TDUnitXNullLogger)
protected procedure OnBeginTest(
const threadId: TThreadID;
const Test: ITestInfo
); override;
public var testInfo: ITestInfo;
end;
function TMyTest.getCurrentTestName(): String;
begin
Result := TMyLogger(myLogger).testInfo.MethodName;
end;
procedure TMyTest.SetupFixture();
begin
myLogger := TMyLogger.Create();
TDUnitX.CurrentRunner().AddLogger(myLogger);
end;
procedure TMyTest.TestName();
begin
const expected = 'TestName';
var actual := getCurrentTestName();
Assert.AreEqual(expected, actual);
end;
{ TMyLogger }
procedure TMyLogger.OnBeginTest(const threadId: TThreadID; const Test: ITestInfo);
begin
testInfo := Test;
end;
initialization
TDUnitX.RegisterTestFixture(TMyTest);
end.

更好地使用:

结果:=TJPANUllLogger(myLogger(.testInfo.Name;

因为这给出了测试的名称,而不仅仅是方法名称。

相关内容

  • 没有找到相关文章

最新更新