如果应用程序是Firemonkey,如何使用条件定义进行测试?

时间:2012-09-21 09:10:11

标签: delphi cross-platform delphi-xe2 conditional-statements

我使用DUnit。它有一个VCL GUITestRunner和一个控制台TextTestRunner。

在Firemonkey和VCL Forms应用程序使用的单元中,我希望实现以下目的:

  1. 如果是Firemonkey app,如果target是OS X,并且在OS X上执行 - > TextTestRunner
  2. 如果Firemonkey应用,如果目标是32位Windows,则在Windows上执行 - > AllocConsole + TextTestRunner
  3. 如果是VCL应用 - > GUITestRunner
  4. {$IFDEF MACOS}
    TextTestRunner.RunRegisteredTests;      // Case 1
    {$ELSE}
       {$IFDEF MSWINDOWS}
       AllocConsole;
       {$ENDIF}
       {$IFDEF FIREMONKEY_APP}              // Case 2 <--------------- HERE
       TextTestRunner.RunRegisteredTests;  
       {$ELSE}                              // Case 3
       GUITestRunner.RunRegisteredTests;
       {$IFEND}
    {$ENDIF}
    

    使案例2有效的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

没有内置条件告诉您.dproj文件中指定的项目FrameworkType是VCL还是FMX。据我所知,您无法在代码中打开该设置。还要记住,拥有一个同时使用VCL和FMX的应用程序是完全可能的,尽管肯定不是主流。这真的不是一个或两个条件。

因此,我建议您声明自己的条件定义,以控制是使用GUI运行器还是文本运行器。

事实上,你可能已经有了某种机制来做到这一点。您为单位GUITestRunner编码。这意味着它必须位于与问题中的代码相同的文件中的uses中。您是如何有条件地在使用条款中包含GUITestRunner的?

注意:Embarcadero论坛上提出了同样的问题:https://newsgroups.embarcadero.com/message.jspa?messageID=400077

答案 1 :(得分:-2)

使用{$IF Defined(MSWINDOWS)}

而不是{$IFDEF MSWINDOWS}

因为{$IFDEF MSWINDOWS}在Firemonkey VCL应用程序中无法正常工作。