我有以下场景,我调用EXPECT_CALL
将函数Foo
的返回值设置为true
,但我得到以下错误
Actual: never called - unsatisfied and active
我看到的一件重要的事情是将一个对象传递给EXPECT_CALL
,这里就是这种情况。如同在classPtr
中一样,是指向MockClass
对象的有效指针。
//测试类别
class Feature
{
[[maybe_unused]] virtual bool Foo(const std::string& digit, int number);
};
//模拟类
class MockClass : public Feature
{
public:
MOCK_METHOD(bool, Foo, (const std::string& digit, int number),
(override));
};
//测试等级
class UtClass : public Ut
{
public:
std::unique_ptr<MockClass> classPtr = std::make_unique<MockClass>());
}
TEST_F(UtClass, Test)
{
EXPECT_CALL(*classPtr, Foo("A", 5))
.WillOnce(Return(true)); // Actual: never called - unsatisfied and active
}
- 您不调用
Foo
"从未打过";是预期的错误 - 您应该创建并销毁
MockClass
,在测试用例TEST_F(UtClass, Test)
中使用本地MockClass mock_class
,否则您将收到有关mock对象泄漏的错误
应该是这样的
class Feature {
[[maybe_unused]] virtual bool Foo(const std::string& digit, int number);
};
class Consumer {
public:
bool Eat(Feature *f) {
return f->Foo("A", 5);
}
};
class MockClass : public Feature {
public:
MOCK_METHOD(bool, Foo, (const std::string& digit, int number), (override));
};
class UtClass : public ::testing::Test {
};
TEST_F(UtClass, Test) {
MockClass mock;
EXPECT_CALL(mock, Foo("A", 5)).WillOnce(Return(true));
Consumer consumer;
consumer.Eat(&mock);
}