2012-09-21 51 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

相關問題