簡體   English   中英

如何在C ++中使用gtest / gmock調用另一個全局函數的地方編寫針對全局函數的單元測試?

[英]How to write unit test for global functions where it is calling another global function using gtest/gmock in C++?

我在文件中有大約10個全局函數。 需要為它們每個編寫單元測試用例。 可以從另一個全局函數調用全局函數。

您可以考慮以下三個全局功能。

int bar(int n){
    ..........
    //Could call another global function.
    ..........
}

int foo(int n){
    ..........
    int b = bar(x);
    ..........
}

int hut(int n){
    ..........
    ..........  
    int a = foo(x);
    ..........
    ..........  
    int b = hut(y);
    ..........
    ..........
}

在測試hut()時,應該模擬foo()和bar()函數。 foo()和bar()也可能發生相同的情況。 我正在使用gtest和gmock。 可以使用gtest和gmock嗎?

謝謝閱讀。

如果它們在同一個文件中,則可悲的是沒有(健全)的方法來模擬那些全局函數。 即使它們不是,您也很難做到這一點(例如,在構建用於單元測試的代碼時,將原始代碼修改為#include模擬標頭,而不是真實的標頭),它不會很漂亮,所以我d強烈建議您不要這樣做。

盡管有第三方擴展添加了全局模擬支持,但它僅有助於創建模擬,但不幸的是, “我如何使函數調用模擬”這一問題沒有幫助。

他們在此FAQ對此進行了介紹 ,甚至在其Blog中提供了可能的解決方法-您可以以“擺脫”靜態全局函數並使代碼可測試的方式重寫代碼。

簡而言之:不,沒有模擬全局函數的簡便方法(尤其是當它們調用其他全局函數時),將代碼重構為可測試性更高的方法可能更好。

暫無
暫無

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

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