C++ Google Mock - EXPECT_CALL() - 期望在不直接调用时不起作用
C++ Google Mock - EXPECT_CALL() - expectation not working when not called directly
我对 Google Mock 还是很陌生,边学边学。我刚刚添加了一些单元测试,我 运行 遇到了一个问题,我无法让 ON_CALL() 正确存根从方法中调用的方法。
下面的代码概括了我所拥有的;
class simpleClass
{
public:
bool simpleFn1() { return simpleFn2(); }
virtual bool simpleFn2() { return FALSE; }
}
在我的单元测试中我有:
class simpleClassMocked : public simpleClass
{
private:
MOCK_METHOD0(simpleFn2, bool());
}
class simpleClassTests : public ::testing::Test
{
}
TEST_F(simpleClassTests, testSimpleFn2)
{
shared_ptr<simpleClassMocked> pSimpleClass = shared_ptr< simpleClassMocked >(new simpleClassMocked());
ON_CALL(*pSimpleClass, simpleF2()).WillByDefault(Return(TRUE));
// This works as expected - simpleFn2() gets stubbed
pSimpleClass->simpleFn2();
// This doesn't work as expected - when simpleFn1 calls simpleFn2 it's not the stubbed expectation???
pSimpleClass->simpleFn1();
}
我想我一定遗漏了一些明显的东西,有人能帮忙吗?谢谢!
您必须将方法标记为 virtual
并在 simpleClassMocked
class
中添加相应的 MOCK 函数
class simpleClass
{
public:
virtual bool simpleFn1() { return simpleFn2(); }
virtual bool simpleFn2() { return FALSE; }
}
此外,您需要将 Mock 方法放在 public
区域
class simpleClassMocked : public simpleClass
{
public:
MOCK_METHOD0(simpleFn2, bool());
MOCK_METHOD0(simpleFn1, bool());
}
现在可以使用了
我对 Google Mock 还是很陌生,边学边学。我刚刚添加了一些单元测试,我 运行 遇到了一个问题,我无法让 ON_CALL() 正确存根从方法中调用的方法。
下面的代码概括了我所拥有的;
class simpleClass
{
public:
bool simpleFn1() { return simpleFn2(); }
virtual bool simpleFn2() { return FALSE; }
}
在我的单元测试中我有:
class simpleClassMocked : public simpleClass
{
private:
MOCK_METHOD0(simpleFn2, bool());
}
class simpleClassTests : public ::testing::Test
{
}
TEST_F(simpleClassTests, testSimpleFn2)
{
shared_ptr<simpleClassMocked> pSimpleClass = shared_ptr< simpleClassMocked >(new simpleClassMocked());
ON_CALL(*pSimpleClass, simpleF2()).WillByDefault(Return(TRUE));
// This works as expected - simpleFn2() gets stubbed
pSimpleClass->simpleFn2();
// This doesn't work as expected - when simpleFn1 calls simpleFn2 it's not the stubbed expectation???
pSimpleClass->simpleFn1();
}
我想我一定遗漏了一些明显的东西,有人能帮忙吗?谢谢!
您必须将方法标记为 virtual
并在 simpleClassMocked
class
class simpleClass
{
public:
virtual bool simpleFn1() { return simpleFn2(); }
virtual bool simpleFn2() { return FALSE; }
}
此外,您需要将 Mock 方法放在 public
区域
class simpleClassMocked : public simpleClass
{
public:
MOCK_METHOD0(simpleFn2, bool());
MOCK_METHOD0(simpleFn1, bool());
}
现在可以使用了