1

我正在尝试根据此处的答案模拟 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 指针相同。

有谁知道我错过了什么?

4

0 回答 0