如何使用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
只要你想太多。
答
这个问题已经得到了很好的回答,但我觉得这可能会增加一些价值来增加一些叙述。
“没有参数的函数”的概念实际上是一个矛盾。
如果一个函数没有参数,那么它实际上是一个常量,一个进程或一个无操作。
如果它返回的值不会产生可观察的副作用,那么它是一个常量,您已经知道返回值应该是什么。您可以简单地使用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
谢谢你写了一个有用的答案。 –
分离问题是逻辑良好测试代码的第一步。请注意,现在可以单独测试从套接字读取的过程。 +1 –
你是说我必须修改原始代码? –
@TheIndependentAquarius是的,你应该 –