這就是我如何做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的理想時間。
來源
2012-08-07 08:23:24
Baz