C单元测试模拟“私人”功能

时间:2015-10-27 14:35:03

标签: c unit-testing module mocking

我正在尝试在C编码中实现TDD。我正在以一种非常模块化的方式构建程序结构,并尽可能使用原子函数。我为一个模块(module =头文件+源文件)制作了一个测试文件(包括几个套装)。我正在努力使程序文件“不知道它们正在被测试”,换句话说 - 我不想在正确的程序中测试部分代码。因此,我几乎经常需要在测试文件中包含源文件,以便能够访问“私有”变量和函数。

那是介绍,现在是问题:如果在模块中我有一个aaa()函数,它在bbb()函数内部使用,它使用了一些{{1}通过模拟xxx()函数:bbb()并提供模拟< x()的em> xxx 模块。但是,我无法找到#define bbb mock_bbb函数的原子测试方法,它使用同一模块中的函数。有可能吗? (请注意,除了#include的{​​{1}}之外,我还必须能够使用原始的aaa()进行测试

我最接近的尝试是使用bbb(),但问题是我没有找到一种方法来自动化(通配符或什么?) - 我将进行近100次测试文件,每个文件包含几个要测试的函数 - 我不能允许自己手动放置aaa()中的每个函数。

1 个答案:

答案 0 :(得分:0)

我从不以原子方式测试“私有”函数。我通常使用其公共函数对c模块进行单元测试,并检查其对其他模块的调用(通过依赖注入使用模拟)并检查其私有数据成员(通过使用GetDataPtr()公开其私有数据成员 - 编译的函数仅适用于单元测试项目。)

对我而言,单元测试框架的努力和复杂性之间的最佳交易,尽管在某些“私有”函数中不可能达到100%的语句覆盖率。