2017-06-29 28 views
0

私はFMX GUI出力に変換しようとしているコンソールベースのDUNITXユニットテストプログラムを持っています。エンバカデロのドキュメントhereを読んだ、私は、次の手順を実行して、テストプログラムファイルを変更:Delphi DunitX FMX GUIロガー

  1. はDUnitX.Loggers.Consoleユニット
  2. がコメントアウトコメントアウトDUnitX.Loggers.GUIXユニット
  3. を含ま{$ APPTYPE CONSOLE}指令
  4. ロガーをロガーに変更しました:= TGUIXTestRunner.Create(nil);

修正リストのようになります。私は(東京10.2を使用して)これを実行すると

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. 

私は次のエラーを取得する:

enter image description here

私も私ことに注意してくださいコンパイルするfmxフォームが見つからないので、DUNITXソースへのパスをライブラリパスに含める必要がありました。

私はここに何かがあると仮定します。これについては、ドキュメントが少し薄いので、どんな助けもありがたいです。

おかげ

+0

「APPTYPE」ラインから「$」を削除してください: '//{$ APPTYPEコンソール} '。 '{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

関連する問題