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

我是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())的检查按预期成功。

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

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

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

  • 测试代码-use-> SUT -use-> DOC

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

  • 测试代码-use-> refereceToClassService -use-> referenceToClassServer

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

如果最终,referenceToClassService将使用模拟的referenceToClassServer

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

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

※最好有足够的代码来更好地了解您的情况

本文链接:https://www.f2er.com/2456303.html

大家都在问