如何在C ++中使用gtest / gmock调用另一个全局函数的地方编写针对全局函数的单元测试?

时间:2018-11-17 04:54:47

标签: c++ unit-testing googletest gmock

我在文件中有大约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吗?

感谢您的阅读。

1 个答案:

答案 0 :(得分:1)

如果它们在同一个文件中,那么可悲的是没有(健全)的方法来模拟那些全局函数。即使不是,也很难(例如,在构建用于单元测试的代码时,将原始代码修改为#include模拟标头,而不是真实的标头),并且它不会漂亮,所以我强烈建议您反对它。

虽然有一个third party extension添加了全局模拟支持,但它仅有助于创建模拟,但不幸的是,“我如何获得我的函数来调用模拟”” em>问题。

它们在this FAQ中对此进行了介绍,甚至提供了可能的解决方法in their Blog-您可以通过“摆脱”静态全局函数并使代码可测试的方式来重写代码。

简而言之:不,没有模拟全局函数的简便方法(特别是如果它们调用其他全局函数),则最好将代码重构为可测试性更高的代码。 / p>