2012-09-21 86 views
4

我使用DUnit。它有一个VCL GUITestRunner和一个控制台TextTestRunner。如何使用条件测试定义应用程序是否是Firemonkey?

在由两个Firemonkey和VCL中使用的单位形式应用我想实现如下:

  1. 如果Firemonkey的应用程序,如果目标是OS X,和在OS X执行 - > TextTestRunner
  2. 如果Firemonkey的应用程序,如果目标是32位的Windows,Windows上执行 - > AllocConsole + TextTestRunner
  3. 如果VCL应用 - > GUITestRunner

{$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的最佳方式?

+0

可以使用同时使用FireMonkey和VCL单元的应用程序。 –

+0

案例1是否属实?我的意思是同时定义MACOS和MSWINDOWS?另外,你的意思是“目标是OS X,但在Windows上执行”? –

+0

@TOndrej:因为在Wnidows上无法运行Mac OSX应用程序,因此建议自动重构问题 –

回答

0

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

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

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

注:同样的问题已经被问的英巴卡迪诺论坛:https://newsgroups.embarcadero.com/message.jspa?messageID=400077

+0

我最终在我的项目设置中添加了“条件定义”下的FIREMONKEY条件定义(为了使它在全局工作适用于所有单位)。我可能已经用{$ DEFINE FOREMONKEY}创建了一个FireMonkey.inc。 –

+0

“你是如何有条件地在使用条款中包含GUITestRunner的?”非常正确 - 我在使用条款中也遇到了同样的问题。 –

-2

使用{$IF Defined(MSWINDOWS)}

代替{$IFDEF MSWINDOWS}

因为{$IFDEF MSWINDOWS}不Firemonkey VCL应用程序正常工作。

+0

为什么?你能提供一些信息吗? – dominikkv

相关问题