11

您是否应该设计代码以使测试更容易?如果是这样,如何设计c++代码以便于测试。

  • 如何在 C++ 中应用依赖注入?
  • 我是否应该使用纯接口类作为基础来实现这些类以简化伪造测试对象的创建?
    • 这将迫使我制作很多虚拟方法。这会影响性能吗?
  • 在设计 C++ 中的可测试性时,我还应该考虑什么?
4

4 回答 4

9

我是否应该使用纯接口类作为基础来实现这些类以简化伪造测试对象的创建?

  • 这将迫使我制作很多虚拟方法。这会影响性能吗?

我经常使用的一种解决方法是将类模板化,而不是将其隐藏在接口后面。然后我可以在测试时将测试/模拟对象作为模板参数传递,否则传递真实对象。这样,就可以避免虚函数的性能损失。

编辑
好的,一个简单的例子:

使用 OOP 和接口,您可以编写如下函数:

void Foo(IBar& someBar) { ... }

这个函数接受一个实现IBar接口的参数,并用它做一些事情。如果你想传入一个虚拟的 mock 实现,你只需编写一个继承自的 mock 对象并将其IBar传递给Foo. 简单明了。

但是您可以使用模板实现相同的目的:

template <typename BarType>
void Foo(BarType& someBar) { ... }

……就是这样。的主体Foo几乎没有变化。只要传递给函数的类型暴露了我们需要的所有成员,它就可以工作,而不必从接口类正式继承,也没有虚函数和运行时多态性的开销。

于 2009-11-05T15:04:01.497 回答
5

不要从一开始就设计太多,然后写一个测试,然后让它通过,但不要超过这个。保持你的功能非常简短。看看你做了什么并重构它。如果你要写评论,最好把有问题的代码放到一个名字好听的单独函数中。

并且不要花太多时间思考模式,这是很多科学和很少结果,只需先编写一个测试并保持你的代码简单,然后,令人惊讶的是你不需要为它编写测试,你已经完成了它已经。你的代码有效。

于 2009-11-05T17:09:11.367 回答
3

最大内聚和最小耦合

这将使您的测试生活更轻松。

于 2009-11-05T14:47:49.093 回答
0

我认为最关心的应该是...

  1. 实现功能
  2. 代码可扩展性
  3. 代码可重用性
  4. 代码可维护性
于 2009-11-05T15:04:56.953 回答