我有一个C模块,我想重构一下有些全局变量和结构没有隐藏(在module.h文件中)我在一些测试用例中使用了这个变量,但没有其他地方,所以我认为将它们设置为静态是个好主意在我的测试用例中,我将这些变量外部化并填充测试值但如果它们是静态变量,我就无法从测试用例中找到它们我不想写getter和setter方法并把它放到.h文件中,因为我想隐藏这个变量。
我知道如果在测试用例中包含.c文件,我可以看到静态变量。
有没有其他方法来填充这些变量?
我使用cygwin和gcc,测试框架是CppUtest。
提前谢谢。

最佳答案

主要有两种可能性:
测试的困难在于模块提供的接口不完整。
您的单元测试是以一种消费者永远不需要的方式窥探模块的内部。
如果问题是一个不完整的接口,那么您可以添加额外的接口,使模块更容易测试,更普遍地可用例如,如果静态变量是某种类型的计数器,则可能需要添加一个“reset”方法将计数器设置回零,为单元测试的下一部分做好准备,或者(在更一般的用例中)允许将统计信息归零,以便可以重新累积统计信息。
如果问题是单元测试需要比用户需要更深入地探测,那么使用#include "sourcecode.c"的测试代码就不会有任何问题它使模块代码保持干净以供一般使用;它允许单元测试比其他测试更深入地探测它将测试代码从“黑盒”测试转换为“白盒”测试的形式-测试可以看到比常规黑盒测试更多的测试代码但这有时是有帮助的它通常是发展的中间阶段一旦所有的黑盒测试都准备好了,您可能就不需要以同样的方式来探测内部——直到您做了更改。

07-24 09:44
查看更多