我使用DUnit。它有一个VCL GUITestRunner和一个控制台TextTestRunner。
在Firemonkey和VCL Forms应用程序使用的单元中,我希望实现以下目的:
{$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 :(得分: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应用程序中无法正常工作。