簡體   English   中英

在C ++中模擬非類方法

[英]Mocking non-class methods in c++

我正在嘗試在舊版應用程序中重構代碼,並遇到代碼看起來像這樣的情況

namespace DB
{
    void GetDataBase(IDataBase** db);
}

有很多不同的地方可以調用此方法,我想測試這些方法,但要替換返回的結果。 我可以使用某種設計來正確模擬嗎?

我所擁有的就是這個,但是它雖然可行,但似乎並不是一個好方法

namespace DB
{
    void GetDataBase(IDataBase** db);
    void SetTestDataBase(IDataBase* db);
}

還有許多其他類似的情況,我很樂意就如何改善這種情況提出一些想法。

您建議的方式是可以的,但是它會污染測試代碼,因此您可能需要的不止一種這樣的方法。 另請注意,如果有靜態變量被初始化並使用此函數,則此方法可能不起作用。

我建議您做的是兩者之一-

  1. 清理代碼,這不是一個具有很多依賴關系的復雜函數,您可以輕松地將其更改為簡單的工廠調用。 為了避免遍歷使用它的所有功能,您可以創建一個為您執行的宏。 然后,工廠可以使用#ifndef語句來確定天氣,以使用模擬或真實代碼。 (使用define語句編譯測試代碼,不使用define語句編譯生產代碼)
  2. 您可以在鏈接時替換實現。 編譯生產代碼時,將其與實際實現鏈接; 但是當您編譯測試時,請將其與您的模擬鏈接起來以返回您喜歡的對象。

兩種方法都確保沒有在main之前調用的靜態方法正在使用您要模擬的get方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM