在C ++中,如何为静态函数调用的函数获取EXPECT_CALL()

问题描述 投票:0回答:1

我是gmock的新手,有时我不得不编写gmock单元测试。

我在说ClassServer的类中有一个名为join_server()的函数,并且ClassServer有一个对应的MOCK类。我也有一个名为create_service(ClassServer&RefToClassServer)的静态函数,在另一个类ClassService中定义。静态函数create_service()使用对ClassServer的引用调用join_server()。

我正在尝试编写一个gmock测试,以断言只要调用create_service()就会调用join_server()。但我得到以下错误。

预期:将被调用一次实际:从未致电-不满意和活跃

我的gmock测试就是这样的东西

BOOST_AUTO_TEST_CASE(test_create_service)
{   
        EXPECT_CALL(referenceToClassService, join_server());
        create_service(referenceToClassService);
}

gmock是否不支持检查通过静态函数调用的函数?知道如何执行create_service()时断言join_server()被调用吗?

在join_server()中,我正在打印消息,并且确认只要调用create_service(),就会调用join_server()。

我可以提供完整的代码,但首先我想检查它是否受支持。

注意:join_server()也由另一个类的成员函数(例如DummyClass)调用。此成员函数不是静态的,在这种情况下,我对EXPECT_CALL(referenceToDummyClass,join_server())的检查按预期成功。

我不明白为什么静态函数调用它会失败。谢谢

c++ unit-testing googletest gmock
1个回答
0
投票

EXPECT_CALL需要第一个参数的模拟对象如您所知,单元测试通常具有以下结构

  • 测试代码-使用-> SUT-使用-> DOC

如果涉及到您的代码,则可以是

  • 测试代码-使用-> refereceToClassService-使用-> referenceToClassServer

您应该对DOC(referenceToClassServer)设置期望值并将其传递给SUT(referenceToClassService

如果最终referenceToClassService会使用模拟的referenceToClassServer

我可以看到您正在为referenceToClassService设置期望值,因此应将其更改为referenceToClassServer,因为refereceToClassService不是模拟对象

  • 之前:EXPECT_CALL(referenceToClassService, join_server());
  • 之后:EXPECT_CALL(referenceToClassServer, join_server());

※如果有足够的代码来更好地了解您的情况,那就更好了

© www.soinside.com 2019 - 2024. All rights reserved.