您是否应该设计代码以简化测试?如果是这样,如何设计 c ++ 代码,以便于测试。
答案 0 :(得分:9)
我是否应该使用纯接口类作为基础来实现类,以简化伪测试对象的创建?
- 这会迫使我制作很多虚拟方法。这会影响表现吗?
我经常使用的解决方法是对类进行模板化,而不是将其隐藏在接口后面。然后我可以在测试时传递测试/模拟对象作为模板参数,否则传递真实对象。这样就避免了虚拟功能的性能损失。
修改强>
好的,一个简单的例子:
使用OOP和接口,您可以编写如下函数:
void Foo(IBar& someBar) { ... }
此函数采用实现IBar
接口的参数,并对其执行某些操作。如果要传递虚拟模拟实现,只需编写一个继承自IBar
的模拟对象,并将其传递给Foo
。简单明了。
但你可以用模板实现同样的目的:
template <typename BarType>
void Foo(BarType& someBar) { ... }
......就是这样。 Foo
的主体几乎没有变化。只要传递给函数的类型公开我们需要的所有成员,它就可以工作,而不必正式从接口类继承,并且没有虚函数和运行时多态性的开销。
答案 1 :(得分:4)
不要从一开始就设计太多,然后编写一个测试,然后让它通过,但不能超过它。保持您的职能非常。看看你做了什么,重构它。如果您要撰写评论,最好将有问题的代码放到一个有良好名称的单独函数中。
不要花太多时间考虑模式,这是很多科学和结果很少,只需先编写测试并保持代码简单,然后,令人惊讶的是你不需要为它编写测试,你已经做到了。你的代码也可以。
答案 2 :(得分:3)
答案 3 :(得分:0)
我认为首要关注的是...