【问题标题】:googletest - find out where unexpected call was madegoogletest - 找出意外呼叫的位置
【发布时间】:2019-02-25 16:31:22
【问题描述】:

我在 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
[...]

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

【问题讨论】:

    标签: c++ unit-testing googletest googlemock


    【解决方案1】:

    来自文档: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 将在每次调用模拟方法后打印堆栈跟踪。然而,这可能会导致巨大的输出,尤其是在大型测试中。您可能希望使用 --gtest_filter= 标志或设置环境变量 GTEST_FILTER 将您的测试限制在特定的测试(即失败的测试)。它使用您要运行的测试的正则表达式。

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

    【讨论】:

    • 当我将它传递给二进制文件时,它似乎只是忽略了--gmock_verbose=info 标志。使用--help 列表执行也只有googletest 而没有googlemock 选项。我是否必须在我的程序中或构建测试库时启用 args 2 gmock som?
    • 我的主目录中只有 ::testing::InitGoogleTest(&argc, argv);,而 ::testing::InitGoogleMock(&argc, argv); 不见了。添加模拟初始化使您的提案生效。非常感谢!
    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多