在具有继承和虚函数的面向对象语言中,从单元测试代码中删除依赖项(例如数据库,API调用等)可以像将这些依赖项封装在自己的方法中一样简单,然后在继承的测试类中重写这些方法从课堂上进行测试.
但是,在尝试为过程代码执行类似操作时遇到了问题(特别是C).没有继承我不能覆盖那些调用,那么在单元测试过程代码时如何提供相似的依赖删除?
一种选择是提供对这些依赖项的调用的替代方法并用#ifdef
s 包围它们,但理想的方法是将单元测试应用于与进入最终构建时相同的代码.这可能吗?
获取修改代码的工作,并宣读题为"我的应用程序所有的API调用"的章节.
基本上,Feathers描述了两个选项:
"链接器接缝":您可以在不需要更改代码的情况下针对您尝试存根的API调用编译不同的实现集 - 基本上将makefile/.sln更改为在函数的不同实现中进行编译.
如果这不起作用,他会谈到"皮肤和包装",你基本上将所有API函数移动到一个抽象基类中,创建两个派生类 - 一个生产和一个单元测试实现,转发调用适当的方法 - 然后使用依赖注入来传递适当的函数集.