我有以下场景,我调用
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
,在测试用例中使用本地MockClass mock_class
TEST_F(UtClass, Test)
,否则您将收到有关模拟对象泄漏的错误。应该是这样的
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);
}
开始使用 Google Mock 时,我最初不清楚的是
EXPECT_CALL()
作为需要在测试代码运行之前设置的配置。
Google Test 中的典型工作流程遵循以下步骤:
但是,Google Mock 工作流程有所不同:
EXPECT_CALL()
)。EXPECT_CALL()
。尝试执行代码然后调用
EXPECT_CALL()
会导致 Actual: never called - unsatisfied and active
警告。
这个误解对我来说至关重要。