1

您在 TDD 中学到的第一件事是,为了使事物可测试,它们需要松散耦合。在大多数语言中,这是通过通过接口分离耦合来实现的,推迟依赖项的注入,以便模拟对象可以停靠到我们想要测试的实现

现在,在 C++ 中,我们当然可以完全按照这种方法使用抽象类作为接口,但我们也有模板编程的能力,它在编译时解决依赖关系

我见过太多的例子,如何使用标准方法进行 TDD,但模板编程的例子介于零和 zilch 之间。是的,我已经看到 Alexandrescu 使用策略模板参数来推迟选择实现的方法,但我想知道为什么这种方法没有更普遍。它是否会导致困难或令人不安的副作用?

简而言之,在使用模板和编译时多态进行编程时,遵循 TDD 的最佳方法是什么?

4

1 回答 1

1

在大多数情况下,我并没有看到它与通过继承进行的依赖注入有什么不同。只需编写一个实现模板所需概念的存根/模拟类,用该类实例化模板,然后从那里开始......就像它是我将从它继承的抽象接口一样,将它注入到我的对象中想要测试(可能在施工期间),然后运行我的测试......

非常简单的例子:

template < typename T >
T* create();

struct object {};

TEST_CASE(itCreates) {
  object * o = create<object>();
  o != 0;
  delete o;
}
于 2012-05-20T15:50:18.783 回答