2013-12-18 84 views
1

我正在寫一塊簡單的C++類,並嘗試爲代碼提供單元測試用例。單元測試靜態函數的設計模式

的代碼很簡單,只要:

class Foo 
{ 

static int EntryFunction(bool flag) 
{ 
    if(flag) 
    { 
     TryDownload(); 
    } 
    else 
    { 
     TryDeleteFile(); 
    } 

    return 0; 
} 

static void TryDownload() 
{ 
    // http download code 
} 

static void TryDeleteFile() 
{ 
    // delete file code 
} 
} 

的問題是,根據UT的概念,我們不能在網絡連接上中繼。所以unittest不能真正運行下載代碼。我的最終目標是測試代碼路徑,例如:當傳入TRUE時,下載代碼路徑應該命中,否則刪除邏輯應該命中。我想覆蓋這個類,所以下載和刪除功能可以重寫,只需設置一個標誌和noop,但功能是靜態的。

我想知道在這種情況下什麼是測試它的好方法?

回答

0

我建議的方法之一是在您的單元測試框架中使用Google Mock庫。

使用Google模擬庫,您可以完全按照您的解釋進行操作。

1

我認爲這取決於TryDownload和TryDelete函數中的內容。如果他們使用一些其他對象/函數來執行他們的任務,您可以配置這些對象的模擬,以便您的TryDownload和TryDelete不知道他們沒有真正下載/刪除任何東西。

如果你沒有這樣的對象/功能(一切都包含在TryDownload/TryDelete),人們可能會認爲該代碼是不適合單元測試,因爲它不能被分解成小單位。在這種情況下,你唯一的選擇是一個真正的web服務(可能運行在本地主機上),它可以讓這些功能發揮作用。