4

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

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

  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 工作的最佳方法是什么?

4

2 回答 2

0

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

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

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

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

于 2012-09-21T09:36:24.087 回答
-1

利用{$IF Defined(MSWINDOWS)}

代替{$IFDEF MSWINDOWS}

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

于 2014-02-06T13:04:56.913 回答