Gtest和Gmock使用指南 (6) - 桩掉C函数

2021-01-03  本文已影响0人  louyang

假设,被测函数用到了外部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
上一篇下一篇

猜你喜欢

热点阅读