嵌套预期调用时,gtest EXPECT_CALL 不起作用
gtest EXPECT_CALL does not working when expected call is nested
看看这样的代码片段:
class Foo {
public:
Foo() {
}
void invoke_init(const int i) {
init(i);
}
private:
void init(const int i) {
std::cout << "init " << i << std::endl;
}
};
class MockedFoo : public Foo {
public:
MOCK_METHOD(void, init, (const int));
};
TEST(Foo, TestInitCalled) {
MockedFoo mock;
mock.invoke_init(1);
EXPECT_CALL(mock, init(1));
}
正如预期的那样,调用了 init()
并且我看到了相应的输出。但是测试失败了。为什么?那里有什么问题?
Foo::init
需要 protected 而不是 private。它还需要是 虚拟.
如果没有protected
作为它的可见性属性,它就不能在继承的class中真正被覆盖。没有 virtual,gmock 也无能为力。
而不是这个:
private:
void init(const int i) {
std::cout << "init " << i << std::endl;
}
这个:
protected:
virtual void init(const int i) {
std::cout << "init " << i << std::endl;
}
看看这样的代码片段:
class Foo {
public:
Foo() {
}
void invoke_init(const int i) {
init(i);
}
private:
void init(const int i) {
std::cout << "init " << i << std::endl;
}
};
class MockedFoo : public Foo {
public:
MOCK_METHOD(void, init, (const int));
};
TEST(Foo, TestInitCalled) {
MockedFoo mock;
mock.invoke_init(1);
EXPECT_CALL(mock, init(1));
}
正如预期的那样,调用了 init()
并且我看到了相应的输出。但是测试失败了。为什么?那里有什么问题?
Foo::init
需要 protected 而不是 private。它还需要是 虚拟.
如果没有protected
作为它的可见性属性,它就不能在继承的class中真正被覆盖。没有 virtual,gmock 也无能为力。
而不是这个:
private:
void init(const int i) {
std::cout << "init " << i << std::endl;
}
这个:
protected:
virtual void init(const int i) {
std::cout << "init " << i << std::endl;
}