我正在尝试根据此处的答案模拟 libusb C 接口:https ://stackoverflow.com/a/41640864/1752391
如果我实际调用了预期的函数,测试运行得很好,但是当函数调用被注释掉时,测试显示错误(调用计数不匹配)但测试的最终结果是好的。
我发现一些关于使用静态对象进行测试的信息可能会导致这种情况,在mathandi的回答中只有指针是静态的,并且对象在 TestFixture 的析构函数中被销毁。还尝试在 TEST_F 函数中创建和销毁对象,但没有帮助。
这可能是一个 GMock 错误,但我非常怀疑。这是一些复制此代码的代码:
class Context {
libusb_context* context;
public:
Context() {
// Function call is commented out, should cause an error
// libusb_init(&context);
}
...
}
和测试:
TEST_F(LibusbTests, contextConstructTest) {
EXPECT_CALL(*libusbMock, libusb_init(Ne(nullptr)))
.WillOnce(Return(0));
EXPECT_NO_THROW({ Libusb::Context(); });
}
我没有包含测试 C 自由函数所需的其他必要代码,但我的 libusbMock 指针与 mathandi 的 _bcm2835libMock 指针相同。
有谁知道我错过了什么?