簡體   English   中英

在cmocka中臨時啟用和禁用功能包裝的正確方法?

[英]Correct way to temporarily enable and disable function wrapping in cmocka?

我正在使用cmocka庫來測試一些嵌入式c代碼。 根據文檔我使用__wrap_前綴來模擬函數,所以我可以隔離我的單元測試。 但是,一旦我這樣做,所有對函數的調用將永遠轉到包裝函數。 如何在某些情況下重新啟用實際功能,以便我可以測試它或允許其他功能使用它? 在我看來,唯一的方法是使用全局字段作為開關來調用真實函數,如下所示:

int __wrap_my_function(void) {
    if (g_disable_wrap_my_function) {
        return __real_my_function();
    }

    // ... do mock stuff
}

這是正確的方法嗎?

您只需在沒有-wrap命令行選項的情況下進行編譯。

或者您使用定義:

#include <cmocka.h>
#ifdef UNIT_TESTING
#define strdup test_strdup
#endif

添加模擬函數test_strdup。 您現在可以使用此功能進行測試。

我最終完成了我在問題中提出的建議。 我使用了一個全局變量,我檢查了包裝函數,以便在運行時調用和禁用模擬。

暫無
暫無

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

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