2012-05-15 26 views
3

目前我正在使用iOS上的C++開發OpenGL ES 1.0相關項目。如何在C++上用Xcode成功完成TDD?

我只是無法找到一種順利集成任何單元測試框架的方法,以便在此特定設置上執行TDD。

工作環境:

  1. OS:OS/X 10.7
  2. 目標設備:iOS的
  3. 主要語言:C++
  4. IDE:Xcode的
  5. 的OpenGL ES 1.0

我試過googletest,但爲了使googletest工作,我應該能夠創造e命令行應用程序, ,但由於我使用的是OpenGL ES 1.0,所以我無法將它們真正地導入到Mac上的命令行應用程序。

我嘗試了一種叫做catch的新方法,但我不知道如何與Xcode集成。

任何人都有這個問題的良好解決方案?

回答

0

這就是我如何做TDD編程。首先,我建立我需要添加的新功能,然後建立此功能將具有的所有外部依賴關係。例如,我在當前項目中有一個依賴關係,它提供了有關我正在使用的模型的信息。我也依賴於命令行,因爲客戶端可以輸入我必須迴應的命令。這個命令行是通過一個特殊的終端,我不感興趣的細節。

所以我爲這些外部依賴創建接口類,然後我在我的代碼中只使用這些接口。因此,在進行測試時我不需要模型的C++庫或終端的C++庫(稍後會有更多介紹)。下面是一個接口的例子寫在命令行:

class ICommandLineOutput 
{ 
public: 
    virtual void WriteLine(std::string&) = 0; 
}; 

因此,可以說,我要求寫這寫的時候到命令行,叫WriteTime類。然後,我要做的是將類型爲的對象ICommandLineOutput傳遞給此類構造函數,並且只能使用此接口工作。我不關心我正在使用哪種命令行,只是它的接口。然後我可以使用任何我想要的命令行類,只要它具有ICommandLineOutput類作爲它的基礎。

class WriteTime 
{ 
public: 
    explicit WriteTime(ICommandLineOutput commandLine): _commandLine(commandLine){} 
    ... 
}; 

所以,當單元測試時,我將有一個單獨的C++項目,我將在其中測試我編寫的每個類。這個項目可以使用谷歌測試,它可以是一個命令行項目。所以,即使你正在編寫GUI C++項目中包含的GUI應用程序,測試也有自己的項目。

比方說,我想測試我的班級寫入命令行的時間。我將在名爲TestWriteTime的類中執行此操作。我將使用GoogleMock創建ICommandLineOutput接口的模擬。然後可以通過測試基準對模擬器進行詢問和/或配置,以確定WriteTime是否按預期行事。例如,我可以檢查調用WriteLine()的次數以及它接收的參數。

最後,在我當前的項目中,我正在處理一個基於Linux的項目,其中包含大量的依賴關係。該應用程序也需要很長時間才能啓動。但是,我有一個Windows控制檯項目,在其中進行測試。此應用程序的執行時間少於TDD的理想時間。

相關問題