【问题标题】:how to test public void function which calls void private function of the same class using google test如何使用谷歌测试测试调用同一类的void私有函数的public void函数
【发布时间】:2022-11-23 11:36:02
【问题描述】:

虚拟代码:

void fun()
{
    while (m->hasMessage())
    {
        std::pair<std::string, Vector> msg_pair = m->getMessage();
        auto topic = msg_pair.first;
        auto msg = msg_pair.second;

        for (auto const& x : msg)
        {
            auto const type = m->MessageType(x);

            if (type == "a")
            {
                funa(x,topic);
            }
            else if (type == "b")
            {
                funb(x,topic);
            }
            
            else if (type == "c")
            {
                func(x,topic);
            }
        }
    }
}

fun a,fun b,fun c 是私有函数,fun 是同一个类的公共函数 如何使用谷歌测试来测试函数的乐趣

【问题讨论】:

  • 你遇到了什么问题?为什么函数调用私有成员很重要?
  • 我没有遇到任何问题,我正在寻找一种方法来测试上述功能。

标签: c++ googletest


【解决方案1】:

你不应该测试私有函数,只测试公共接口

但是,如果你真的需要它,你可以使用它(直接来自谷歌测试文档......):

FRIEND_TEST(测试用例名称,测试名称);

例如

class MyClass {
  friend class MyClassTest;
  FRIEND_TEST(MyClassTest, HasPropertyA);
  FRIEND_TEST(MyClassTest, HasPropertyB);
  ... definition of class MyClass ...
};

【讨论】:

  • 我不是在测试私有函数,我想测试公共函数(在虚拟代码之上),然后调用私有函数
  • 您是否尝试过将函数模式与 Google Mock 一起使用?您到底想在这些私有函数中测试什么?他们正在被召唤?使用谷歌模拟。
  • 由于私有函数和公共函数是同一类的一部分,如何使用 google mock 并使用宏 EXPECT_CALL 调用它,它需要两个参数模拟对象和带参数的函数(需要创建 MOCK_METHOD)
  • 抱歉重复我自己:你应该只测试公共功能。如果你真的真的想测试私有函数的调用,唯一的方法是使用 FRIEND_TEST() 宏。您能否提供一个最小的、可重现的示例以及您要测试的内容的描述?
  • 我的回答是否解决了您的问题?如果是这种情况请标记它
【解决方案2】:

我遵循的测试公共函数的方法依次调用私有函数是在私有函数中添加抛出条件(异常),并在测试用例中使用宏 EXPECT_NOTHROW 来测试公共函数

EXPECT_NOTHROW(obj.publicfunction);

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 2020-06-22
    • 2018-12-07
    • 2017-09-18
    • 1970-01-01
    • 2019-03-07
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多