【问题标题】:Delphi DunitX, how do I get the name of the test currently running?Delphi DunitX,如何获取当前正在运行的测试的名称?
【发布时间】:2020-11-13 13:59:18
【问题描述】:

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

例如:

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

【问题讨论】:

标签: delphi testing dunitx


【解决方案1】:

您需要创建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.

【讨论】:

  • 我们不应该把它添加到 DUnit TTestCase 有一个 FTestName 吗?
猜你喜欢
  • 2012-01-12
  • 1970-01-01
  • 2011-12-09
  • 2012-09-26
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2011-07-08
相关资源
最近更新 更多