【问题标题】:TDD and housekeeping overhead with C++C++ 的 TDD 和内务管理开销
【发布时间】:2011-03-30 09:12:58
【问题描述】:

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

iread.h 读.h 读取.cpp 模拟阅读.h 模拟读.cpp testread.h testread.cpp

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

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

直截了当地说,当我在 C++ 中进行测试驱动开发时,由于管家的开销,我真的很头疼。使用 python 时我没有同样的问题。

我最近进行的一项改进是使用 google mock 并从它们的界面自动创建 mock。所以这肯定是一种改进。

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

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

+接口 +命名空间A iread.h +标题 +命名空间A 读.h +来源 +命名空间A 读取.cpp +嘲笑 +命名空间A 模拟阅读.h 模拟读.cpp +测试 +命名空间A testread.h testread.cpp

改为这样做:

+命名空间A 读取.cpp 读.h 准备好了 readmock.cpp readmock.h 读取测试.cpp 读取测试.h

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

您如何在磁盘上组织您的项目?

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

谢谢,

巴里

【问题讨论】:

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


    【解决方案1】:

    不幸的是,对于 C++,'header and module' 事情不会很快消失。

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

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

    【讨论】:

    • 不错!刚刚用谷歌测试测试了这个。将我的测试标头重命名为 cpp 文件,并从我的 main.cpp 文件中删除了包含指令。现在我得到每个类的 obj 文件。谢谢!
    • 我会再添加一个子弹...仅在需要时模拟!听代码。很多时候我们试图模拟太多。
    • @bcarlso:我将把辩论留给另一个问题。 :-)
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 2013-03-22
    • 2010-12-31
    • 2021-11-01
    • 2013-05-09
    • 2010-11-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多