受到Google doc" ForDummies"的启发。 :),我正在尝试一个简单的谷歌模拟与谷歌测试示例如下:
#include <gtest/gtest.h>
#include <gmock/gmock.h>
using ::testing::_;
class A
{
public:
A()
{
std::cout << "A()" << std::endl;
}
virtual ~A()
{
std::cout << "~A()" << std::endl;
}
virtual int incVirtual(int i)
{
return i + 1;
}
};
class MockA: public A
{
public:
MOCK_METHOD1(incVirtual, int(int));
};
TEST(Test, IncTest) {
MockA a;
EXPECT_CALL(a, incVirtual(_));
printf("n == %d\n", a.incVirtual(0));
}
int main(int argc, char **argv)
{
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
当我运行它时,我得到n == 0
:
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from Test
[ RUN ] Test.IncTest
A()
n == 0
~A()
而我希望它是n == 1
。所以我想知道在mock类中定义MOCK_METHODx是不是足以模拟基类方法,还需要做些额外工作才能使MockA::incVirtual
调用A::incVirtual
?
答案 0 :(得分:0)
这表现得如此。通过模拟你的函数,MockA
类基本上用“无所事事”实现覆盖了A
类实现。
如果您想在致电A::incVirtual()
时致电MockA::incVirtual()
,请尝试以下
EXPECT_CALL(a, incVirtual(_)).WillOnce(Invoke(&a, &A::incVirtual));