2017-06-29 72 views
0

我有一個基於控制檯的DUNITX單元測試程序,我試圖將其轉換爲FMX GUI輸出。讀了Embarcadero的文檔here,我做修改測試程序文件如下:Delphi DunitX FMX GUI記錄器

  1. 包括DUnitX.Loggers.GUIX單元
  2. 註釋掉DUnitX.Loggers.Console單元
  3. 註釋掉{$ APPTYPE CONSOLE}指令
  4. 將記錄器更改爲記錄器:= TGUIXTestRunner.Create(nil);

修改上市看起來是這樣的:

program HTMLParserTest; 

{$IFNDEF TESTINSIGHT} 
//{$APPTYPE CONSOLE} 
{$ENDIF}{$STRONGLINKTYPES ON} 
uses 
    System.SysUtils, 
    {$IFDEF TESTINSIGHT} 
    TestInsight.DUnitX, 
    {$ENDIF } 
// DUnitX.Loggers.Console, 
    DUnitX.Loggers.GUIX, 
    DUnitX.Loggers.Xml.NUnit, 
    DUnitX.TestFramework, 
    test.ITUtils.Delphi in 'test.ITUtils.Delphi.pas', 
    ITUtils.Delphi in '..\Concept Test\ITUtils.Delphi.pas', 
    test.ITsimplehtmlparser.Delphi in 'test.ITsimplehtmlparser.Delphi.pas', 
    ITTools.simplehtmlparser.Delphi in '..\Concept 
    Test\ITTools.simplehtmlparser.Delphi.pas'; 

var 
    runner : ITestRunner; 
    results : IRunResults; 
    logger : ITestLogger; 
    nunitLogger : ITestLogger; 
begin 
{$IFDEF TESTINSIGHT} 
    TestInsight.DUnitX.RunRegisteredTests; 
    exit; 
{$ENDIF} 
try 
//Check command line options, will exit if invalid 
TDUnitX.CheckCommandLine; 
//Create the test runner 
runner := TDUnitX.CreateRunner; 
//Tell the runner to use RTTI to find Fixtures 
runner.UseRTTI := True; 
//tell the runner how we will log things 
//Log to the console window 
// logger := TDUnitXConsoleLogger.Create(true); 
logger := TGUIXTestRunner.Create(nil); 
runner.AddLogger(logger); 
//Generate an NUnit compatible XML File 
nunitLogger := TDUnitXXMLNUnitFileLogger.Create(TDUnitX.Options.XMLOutputFile); 
runner.AddLogger(nunitLogger); 
runner.FailsOnNoAsserts := False; //When true, Assertions must be made during tests; 

//Run tests 
results := runner.Execute; 
if not results.AllPassed then 
    System.ExitCode := EXIT_ERRORS; 

{$IFNDEF CI} 
//We don't want this happening when running under CI. 
if TDUnitX.Options.ExitBehavior = TDUnitXExitBehavior.Pause then 
begin 
    System.Write('Done.. press <Enter> key to quit.'); 
    System.Readln; 
end; 
{$ENDIF} 
except 
on E: Exception do 
    System.Writeln(E.ClassName, ': ', E.Message); 
end; 
end. 

當我運行這個(使用東京10.2)我得到以下錯誤:

enter image description here

我也應該注意到,我必須在我的庫路徑中包含DUNITX源代碼的路徑,因爲它找不到要編譯的fmx表單。

我認爲我在這裏失蹤了一些東西,任何幫助將不勝感激,因爲這個文件有點薄。

感謝

+0

嘗試從「APPTYPE」行刪除「$」:'//{$ APPTYPE CONSOLE}'。嘗試製作:「{APPTYPE CONSOLE}」。或者,完全刪除它。 –

+0

嘗試兩者,不幸的是相同的結果 – cheechaway

+0

該選項未選中。 – cheechaway

回答

2

這是我用的,讓我VCL,FMX或控制檯應用程序之間選擇一個模板:

program UnitTests; 


///// UI Selection - Pick only 1! ////////////////////////////// 
{DEFINE UseVCL} 
{$DEFINE UseFMX} 
{DEFINE UseWinConsole} 
//////////////////////////////////////////////////////////////// 


{$IFDEF UseWinConsole} 
{$DEFINE UseConsole} 
{$ENDIF} 

{$IFDEF UseConsole} 
{$APPTYPE CONSOLE} 
{$ENDIF} 

uses 
    {$IFDEF UseVCL} 
    VCL.Forms, 
    DUnitX.Loggers.GUI.VCL, 
    {$ENDIF} 

    {$IFDEF UseFMX} 
    FMX.Forms, 
    DUnitX.Loggers.GUIX, 
    {$ENDIF} 

    {$IFDEF UseConsole} 
    DUnitX.ConsoleWriter.Base, 
    DUnitX.Loggers.Console, 
    DUnitX.Loggers.XML.NUnit, 
    DUnitX.Loggers.Text, 
    DUnitX.Loggers.XML.xUnit, 
    {$ENDIF} 

    {$IFDEF UseWinConsole} 
    DUnitX.Windows.Console, 
    {$ENDIF} 

    System.SysUtils, 
    DUnitX.Generics, 
    DUnitX.InternalInterfaces, 
    DUnitX.WeakReference, 
    DUnitX.FixtureResult, 
    DUnitX.RunResults, 
    DUnitX.Test, 
    DUnitX.TestFixture, 
    DUnitX.TestFramework, 
    DUnitX.TestResult, 
    DUnitX.TestRunner, 
    DUnitX.Utils, 
    DUnitX.IoC, 
    DUnitX.MemoryLeakMonitor.Default, 

//  [TestFixturesUnit1] in '[TestFixturesUnit1].pas', 
//  [TestFixturesUnit2] in '[TestFixturesUnit2].pas', 
//  [TestFixturesUnit3] in '[TestFixturesUnit3].pas', 

    DUnitX.DUnitCompatibility; 

{$R *.res} 

///////////////////////////////////////////////////////////////////////// 
{$IFDEF UseVCL} 
begin 
    Application.Initialize; 
    Application.CreateForm(TGUIVCLTestRunner, GUIVCLTestRunner); 
    Application.Run; 
{$ENDIF} 
///////////////////////////////////////////////////////////////////////// 
{$IFDEF UseFMX} 
begin 
    Application.Initialize; 
    Application.CreateForm(TGUIXTestRunner, GUIXTestRunner); 
    Application.Run; 
{$ENDIF} 
///////////////////////////////////////////////////////////////////////// 
{$IFDEF UseConsole} 
var 
    runner : ITestRunner; 
    results : IRunResults; 
    logger : ITestLogger; 
    nunitLogger : ITestLogger; 

begin 
    try 
     //Create the runner 
     runner := TDUnitX.CreateRunner; 
     runner.UseRTTI := True; 
     //tell the runner how we will log things 
     logger := TDUnitXConsoleLogger.Create(true); 
     nunitLogger := TDUnitXXMLNUnitFileLogger.Create; 
     runner.AddLogger(logger); 
     runner.AddLogger(nunitLogger); 

     //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; 
{$ENDIF} 
///////////////////////////////////////////////////////////////////////// 

end. 
+0

謝謝!工作也很好 – cheechaway