如何在 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()函数应该被mock。 foo() 和 bar() 也会发生同样的事情。我正在使用 gtest 和 gmock。是否可以使用 gtest 和 gmock?

感谢阅读。

如果它们在同一个文件中,很遗憾没有(理智的)方法来模拟这些全局函数。即使它们不是,你也很难做到这一点(例如,在构建单元测试代码时,将原始代码修改为 #include 模拟 headers 而不是真实代码),它会漂亮,所以我强烈建议你不要。

虽然有一个 third party extension 添加全局模拟支持,但它只有助于创建模拟,但不幸的是不是 "how do I get my functions to call the mock instead" 问题.

他们在 this FAQ and even provide possible workarounds in their Blog 中对此进行了介绍 - 您可以将代码重写为 "get rid" 静态全局函数并使您的代码可测试。

简而言之:不,没有好的简单方法来模拟全局函数(特别是如果它们调用其他全局函数),您最好将代码重构为某些东西相反,更可测试。