看看這樣的代碼片段:
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()被呼叫并且我看到了相應的輸出。但是測驗失敗了。為什么?那里有什么問題?
uj5u.com熱心網友回復:
Foo::init需要保護而不是私有。它還需要是虛擬的。
如果沒有protected作為它的可見性屬性,它就不能在繼承的類中真正被覆寫。如果沒有 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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412627.html
標籤:
上一篇:使用一兩個引數呼叫模板函式?
