Gtest和Gmock使用指南 (7) - 桩掉C++类
2021-01-04 本文已影响0人
louyang
有被测函数如下,该函数使用了一个接口类。我们测试的时候,这个接口类的实现是要用gmock打桩打掉的。
int FuncToBeTested(SomeInterface & if, std::string & param) {
return if.some_func(param) == true ? 1 : -1;
}
接口类的定义如下:
class SomeInterface {
public:
virtual bool some_func(std::string & some_param) = 0;
};
使用Gmock桩掉这个接口类的实现:
class MockInterfaceImpl : public SomeInterface {
public:
MOCK_METHOD1(some_func, bool(std::string & param));
};
MOCK_METHOD1
中的1
表示桩掉的函数只有一个入参。
完整的示例代码如下:
$ cat Test.cpp
#include <iostream>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
class SomeInterface {
public:
virtual bool some_func(std::string & param) = 0;
};
class MockInterfaceImpl : public SomeInterface {
public:
MOCK_METHOD1(some_func, bool(std::string & param));
};
int FuncToBeTested(SomeInterface & interface, std::string param) {
return interface.some_func(param) == true ? 1 : -1;
}
TEST(TestSuiteName, TestCaseName) {
MockInterfaceImpl mock_if_impl;
EXPECT_CALL(mock_if_impl, some_func)
.Times(::testing::AtLeast(1))
.WillOnce(::testing::Return(true));
int ret_value = FuncToBeTested(mock_if_impl, "SomeString");
EXPECT_EQ(ret_value, 1);
}
$ g++ Test.cpp -l gtest -l gtest_main -l gmock -l pthread && ./a.out