1

使用 Rad Studio 10 Seattle、DUnitX 和 TestInsight,我需要在控制台或任何日志屏幕中显示一些文本。怎么做到呢?我一直无法在网上找到它。

4

2 回答 2

3
  procedure CreateRunner;
  var fn : TFileName;
  begin
    runner := TDUnitX.CreateRunner;
    runner.UseRTTI := True;

    fn := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'dUnitX.Log';

    ConsoleLogger := TDUnitXConsoleLogger.Create(false);
    TextFileLogger:= TDUnitXTextFileLogger.Create(fn);
    nunitLogger   := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile);

    runner.AddLogger(ConsoleLogger );
    runner.AddLogger(TextFileLogger);
    runner.AddLogger(nunitLogger);
  end;

以下是如何添加日志消息,从https://github.com/VSoftTechnologies/DUnitX/blob/d5861ce0de6a9fbfdc8c158b0b1c8614082c188d/Examples/DUnitX.Examples.General.pas复制的片段

 [TestFixture('ExampleFixture1','General Example Tests')]
   TMyExampleTests = class
   public
     [Test]
     procedure LogMessageTypes;
   end;

procedure TMyExampleTests.LogMessageTypes;
begin
  TDUnitX.CurrentRunner.Log(TLogLevel.Information, 'Information');
  TDUnitX.CurrentRunner.Log(TLogLevel.Warning, 'Warning');
  TDUnitX.CurrentRunner.Log(TLogLevel.Error, 'Error');
end;

如果你想有一个不那么复杂的语法,你总是可以Assert像这样为类添加一个插入器

Assert = class(DUnitX.Assert.Assert) //Or (DunitX.Assert.Ex.Assert)
public
  class procedure Log(const message: string);
end;

class procedure Assert.Log(const message: string);
begin
  TDUnitX.CurrentRunner.Log(TLogLevel.Information, message);
end;
于 2017-01-12T17:53:42.793 回答
0

https://github.com/jsf3rd/DUnitX.git/trunk/Examples

var
  runner : ITestRunner;
  logger : ITestLogger;
begin
  try
    //Create the runner
    runner := TDUnitX.CreateRunner;
    runner.UseRTTI := True;

    //tell the runner how we will log things

    if TDUnitX.Options.ConsoleMode <> TDunitXConsoleMode.Off then
    begin
      logger := TDUnitXConsoleLogger.Create(TDUnitX.Options.ConsoleMode = TDunitXConsoleMode.Quiet);
      runner.AddLogger(logger);
    end;

    //Run tests
    results := runner.Execute;

    System.Write('Done.. press <Enter> key to quit.');
    System.Readln;
  except
    on E: Exception do
      System.Writeln(E.ClassName, ': ', E.Message);
  end;
于 2019-11-04T10:32:38.120 回答