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

问题描述:

AFAIK basic document of gtest显示了带参数的函数示例。我不得不测试一些信号插槽的功能。其中一个没有任何参数。它在内部获取套接字数据,使用局部变量对其进行解析,然后将值分配给类成员。如何使用gtest的函数没有参数,但仍然做计算?

什么是通过gtest测试这种事情的方法?

将它分为两​​个功能。一个是需要参数的核心,另一个是获取套接字数据并将其传递给核心的封装器。例如:

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

现在可以测试compute_core只要你想太多。

+1

分离问题是逻辑良好测试代码的第一步。请注意,现在可以单独测试从套接字读取的过程。 +1 –

+0

你是说我必须修改原始代码? –

+0

@TheIndependentAquarius是的,你应该 –

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

“没有参数的函数”的概念实际上是一个矛盾。

如果一个函数没有参数,那么它实际上是一个常量,一个进程或一个无操作。

如果它返回的值不会产生可观察的副作用,那么它是一个常量,您已经知道返回值应该是什么。您可以简单地使用ASSERT_EQ的返回值。

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

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

在这种情况下,测试应该是这样的:

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

这开始看起来更像一个集成测试比单元测试。

+0

谢谢你写了一个有用的答案。 –