假设,被测函数用到了外部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));
EXPECT_EQ(-1, func_to_be_tested(3,2,x));
}
$ g++ func.cpp func_ut5.cpp -l gtest -l gtest_main -l pthread -l gmock && ./a.out
网友评论