Search code examples
delphic++builderdunitx

How to log in DUnitX?


Using Rad Studio 10 Seattle, DUnitX and TestInsight, I would need to show some texts in the console or any log screen. How can it be done? I have not been able to find it in the web.


Solution

  •   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;
    

    Here's how to add log messages, fragments copied from 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;
    

    If you want to have a less convoluted syntax, you can always add an interposer for the Assert class like so

    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;