我开始在C中编写一个小程序作为开发练习,我想对这个程序进行大量的单元测试。问题是它不时使用fread / fwrite和其他标准函数 - 我不希望我的单元测试打开任何文件,所以如果我可以为fread / fwrite编写存根,那就太好了。
任何人都有解决此问题的方法吗?
提前感谢您的回答!
编辑:我忘记了一件重要的事情:读取存根需要在不同的测试中表现不同。在一个中,读取返回值必须是<然后传递了多个要读取的元素(模拟过早的eof)并且在其他读取的返回值中必须等于传递的元素数量才能读取
答案 0 :(得分:1)
我可以推荐Working Effectively with Legacy Code本书,因为它在很多章节中都涉及到这一点。我在类似的情况下自己使用过它。
对于过程语言中的单元测试有两个建议(除了转换为面向对象的语言):
答案 1 :(得分:0)
如果我正确理解了这个问题,最简单的方法是使用宏(跳过讨论它的邪恶):
#ifdef UNIT_TESTS
#define fwrite(ptr, size, nmemb, stream) (nmemb)
#endif
同样适用于fread
。现在,您可以使用编译器标志在使用单元测试进行编译时指定宏UNIT_TESTS
(例如gcc的gcc -DUNIT_TESTS ...
)。
答案 2 :(得分:0)
我也会使用宏。
使用以下命令创建文件:
#define fopen FOPEN
#define fread FREAD
#define fwrite FWRITE
然后将其添加为强制包含,以便在所有其他包含之前进入。
然后,您可以在存根代码中实现FOPEN以执行任何操作。