使用C ++进行TDD和管理开销

时间:2011-03-30 09:12:58

标签: c++ visual-studio eclipse unit-testing tdd

我测试c ++代码的驱动开发,我觉得很尴尬的事实是我需要为每个类创建许多文件,例如:

iread.h
read.h
read.cpp
mockread.h
mockread.cpp
testread.h
testread.cpp

并将这些文件添加到我项目中的不同文件夹(过滤器)中。

结果,我在很大程度上abondand cpp文件。然而,这打破了单元测试应该尽可能快地构建的规则。所以如果我只能加快其他方面的发展,我希望停止这样做。

为了达到这一点,当我在C ++中使用测试驱动开发时,由于家务管理开销,我真的很头疼。使用python时我没有同样的问题。

我最近做的一个改进是使用谷歌模拟并从他们的界面自动创建模拟。所以这肯定是一种改进。

然而,我觉得我应该能够通过使用插件来进一步减少开销,这些插件会自动为我在编写特定类时所需的所有类创建存根。这样的插件存在吗?关于Eclipse,VS 2005,VS 2008和VS 2010,开发这样的插件会很困难(对不起,但我必须不时在不同的环境中工作)。

另一个问题是我需要做的导航量,以便在Project Explorer中为测试中的给定类找到类(模拟,测试等)(因为它在VS中调用)。我的一个想法是以这种方式停止在项目资源管理器中对文件进行分组:

+interfaces
 +namespaceA
  iread.h

+headers
 +namespaceA
   read.h

+source
 +namespaceA
   read.cpp

+mocks
 +namespaceA
   mockread.h
   mockread.cpp

+tests
 +namespaceA
   testread.h
   testread.cpp

而是这样做:

 +namespaceA
  read.cpp
  read.h
  readi.h
  readmock.cpp
  readmock.h
  readtest.cpp
  readtest.h

这将在解决方案资源管理器中将与特定类关联的文件组合在一起。这是一个好主意吗?你是怎么做的?在readi.h文件中有一个IRead接口会很奇怪...... Michael Feathers写道他根本不使用I但我更喜欢使用它...我的绝大多数接口只有一个实现类与他们联系。

如何在磁盘上组织项目?

还有其他提示吗?你也头痛吗?

谢谢,

百里

1 个答案:

答案 0 :(得分:2)

不幸的是,使用C ++,'标题和模块'事情不会很快消失。

我对源/模拟/测试文件问题的提示是:

  • 将模拟移动到测试文件中 - 测试是模拟器中唯一的客户端。
  • 仅使用模块测试文件
    • 我编写了自己的测试框架,只允许.cpp文件进行测试。
    • cppUnit允许.cpp仅在您注册时进行测试。