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