假设,被测函数用到了外部C函数,这对Gtest来说是极其麻烦的,因为Gtest是专门为C++设计的。例如:
$ cat func.cpp
int extern_c_func(int);
int func_to_be_tested(int a, int b) {
return a - extern_c_func(b);
要想办法用gmock
桩掉extern_c_func()
,我们需要借助第三方工具。
https://github.com/apriorit/gmock-global
从这里下载gmock-global.h
,放到与func.cpp
同一目录下。
$ cat func_ut5.cpp
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "gmock-global.h"
MOCK_GLOBAL_FUNC1(extern_c_func, int(int));
int func_to_be_tested(int, int, int);
class TestSuite : public ::testing::Test {
protected:
void SetUp() override {
// some setup
void TearDown() override {
// some tear down
TEST_F(TestSuite, TestCaseName) {
int x = 2;
EXPECT_GLOBAL_CALL(extern_c_func, extern_c_func(x))
.WillOnce(::testing::Return(x));