googletest - 找出意外调用的位置

googletest - find out where unexpected call was made

我 运行 在 googletest 中进行一些单元测试。我希望对模拟函数 (EXPECT_CALL(*rtosMock, xQueueGenericSend( arg , _, _, _)).Times(AtLeast(1));) 的某些调用具有一些不同的 arg 值。我最终接到了一个具有意外价值的电话。

unknown file: Failure

Unexpected mock function call - returning default value.
      Function call: xQueueGenericSend(NULL, 0x7fff38c99e80, 100, 0)
           Returns: 0
Google Mock tried the following 24 expectations, but none matched:

test.cpp:95: tried expectation #0: EXPECT_CALL(*rtosMock, xQueueGenericSend( arg , _, _, _))...
Expected arg #0: is equal to 0x561fede86f74
Actual: NULL
Expected: to be called at least once
Actual: called twice - satisfied and active
[...]

现在在控制台中,它会显示预期的值和不适合的值,但不会显示意外调用的位置。有没有办法知道意外调用的来源(如打印文件、行号或调用堆栈),然后单步执行程序?

来自文档:https://github.com/google/googletest/blob/master/docs/gmock_faq.md#i-cant-figure-out-why-gmock-thinks-my-expectations-are-not-satisfied-what-should-i-do

如果您 运行 使用 --gmock_verbose=info 测试程序,GoogleMock 将在每次调用 mock 方法后打印堆栈跟踪。然而,这可能会产生巨大的输出,尤其是对于大型测试。您可能希望使用 --gtest_filter= 标志或设置环境变量 GTEST_FILTER 将您的测试限制为特定的测试(即失败的测试)。它使用您想要 运行.

的测试正则表达式

您还可以 运行 调试器中的代码并在 xQueueGenericSend 的调用上设置断点,并检查每个调用以查看失败发生的时间。然后,您将能够缩小可能出现错误的位置。