没有参数但仍然进行计算的函数如何使用gtest?

How to use gtest for the functions that have no arguments but still do calculations?

据我所知,basic document of gtest 显示了带有参数的函数示例。

我必须测试一些信号槽函数。其中之一没有任何参数。它在内部获取套接字数据,使用局部变量对其进行解析,然后将值分配给 class 个成员。

通过 gtest 测试这种东西的方法是什么?

把它分成两个函数。一个是接受参数的核心,另一个是获取套接字数据并将其传递给核心的包装器。例如:

result compute_core(data x);
result compute_wrapper(){
    auto x=read_from_socket();
    return compute_core(x);
}

现在您可以随心所欲地测试compute_core

这个问题已经回答的很好了,但是我觉得它可能会增加一些叙述的价值。

"function with no arguments" 的想法实际上是矛盾的。

如果一个函数没有参数,那么它实际上要么是一个常量,要么是一个过程,要么是一个空操作。

如果它 return 是一个没有产生可观察到的副作用的值,那么它就是一个常量,并且您已经知道 return 值应该是多少。您可以简单地 ASSERT_EQ return 值。

如果它有副作用(从套接字消费、将数据发送到流、将数据存储在数据库或框架中等),那么它就是一个过程。

如果它是一个进程,那么它不能孤立地进行单元测试。一个过程有(可能有很多)输入和输出。而前者对后者的影响就是你要测试的。

在这种情况下,测试将如下所示:

{
    set_up_process_dependencies();
    inject_known_data_into_the_process_possibly_via_dependencies();
    call_process();
    ASSERT_EQ(x, test_some_output_of_the_process());
    ...
}

开始看起来更像是集成测试而不是单元测试。