【发布时间】:2022-12-10 12:07:45
【问题描述】:
我有一个需要测试的函数,但它返回void。
该函数可能会修改一些全局变量。
例如:
/* target_code.h */
void add_num(int n);
/* target_code.c */
#include "target_code.h"
int number = 0;
void add_num(int n) {
number += n;
}
(我要测试的真实功能比它更复杂。)
我想使用框架 - 谷歌测试来测试这个功能。
所以也许我需要实施一个测试程序来测试它。
/* testProgram.cpp */
include "target_code.h"
/* implement the test case for it */
但是这个函数不返回任何东西。它只是修改一个全局变量。
在我的同事看来,extern这个变量number并检查这个例子中的值是否正确是不好的。
不好的事情之一是,也许我们会更改关于number 的变量名,并且这个测试程序可能需要重新编写(难以维护)。
但是没有这个方法,我不知道如何测试这个功能是否正常工作。
我认为的一个方法是实现一个与add_num 做类似事情的函数,并验证这个函数。
这是我认为的一个例子:
/* testProgram.cpp */
int fake_number = 0;
void fake_add_num(int n) {
fake_number += n;
}
/* Implement the test cases */
fake_add_num 对真正的函数“add_num”做同样的事情。他们之间的区别是我可以直接联系到这个fake_number。
也许有不同的方法来验证这种功能。
请给我一个例子来做到这一点。谢谢!!
【问题讨论】:
-
在我的同事看来,在这个例子中,extern 这个变量号并检查值是否正确是不好的。不,问题是你首先有一个修改全局状态的方法。它应该被更改为不依赖于任何全局变量。如果您绝对不能这样做,那么
extern是您唯一的选择 - 您需要以某种方式访问该全局变量以对其进行检查。或者测试可能过于精细,您应该考虑测试使用add_num的代码,而不是函数本身。 -
“
extern这个变量号不好“已经是了。
标签: c++ c unit-testing googletest