【问题标题】:Can I aim for TDD or BDD in my started project?我可以在我开始的项目中以 TDD 或 BDD 为目标吗?
【发布时间】:2009-08-31 02:32:59
【问题描述】:

我决定在我已经开始的项目中尝试 TDD 和 BDD,受到以下问题的回答的鼓舞: Should I start using TDD on a project that doesn't use it already

我正在努力真正开始。 我的项目(开源,托管在http://gitorious.org/rubots)类似于游戏,使用 Ruby 封装并连接到控制服务器和物理模拟环境。 脚本被执行,然后出现一个 GUI,当用户单击开始时,启动了 2 个外部 c++ 程序,其中一个是物理模拟,它们由具有 Ruby 绑定的库控制。 没有办法重置模拟和控制程序,它们应该重新启动。启动它们并使它们处于工作状态大约需要 5 秒钟。 在这种情况下,任何移动之前的整个启动阶段的任何测试都需要,并且模拟取决于还应提供的外部配置文件。

开始编写测试用例真的值得吗? 如何?每个测试都带有 :before 或类似的启动游戏、启动应用程序等?然后每次测试至少需要 5 秒(如果我必须提交命令并等待模拟实体回答,则需要更多时间)。

我错过了一些东西。我是否应该跳过 BDD 和 TDD 以及此类应用程序的测试单元?

【问题讨论】:

    标签: ruby unit-testing tdd bdd


    【解决方案1】:

    在 RubyConf 2007 上,Atomic Object 的 William Bereza 发表了关于 Enhancing Embedded Development with Ruby 的演讲,其中他描述了他们如何将 principles that Atomic Object stands for(敏捷、BDD、自动化测试……)应用于涉及自动机器人车辆的嵌入式项目.几个月前,他在O'Reilly OSCON 2007做了同样的演讲。

    Atomic Objects 网站上有大量资源:

    还有一个关于 Ward Cunningham 和 TDD 嵌入式系统的精彩故事,Robert C. Martin(“鲍勃叔叔”)在his keynote at RailsConf 2009 期间讲述了这个故事(故事大致从 15:50 到 17:20)。故事是这样的:

    鲍勃来看望沃德,沃德把他带到地下室,在那里他盯着屏幕上的小圆圈,仿佛这是宇宙中最酷的东西,他兴奋得就像一个小孩子在圣诞节打开她的第一辆自行车。他所做的是试图弄清楚如何完全 TDD 嵌入式设备(在本例中为视频转换器)根本不需要接触设备。他所做的如下:他已经开始使用模拟在 JUnit 中编写单元测试。然后让测试通过,依此类推,就像你通常做的那样。然后他用为设备生成适当的汇编代码的方法替换了所有方法。由于所有逻辑都是用 Java 编写(和测试)的,“叶子”方法本身就是非常简单的方法,它们只做非常简单的事情,例如“将 int 写入寄存器”或“从标志中读取 bool” register”,其汇编代码非常简单,以至于“显然是正确的”。

    而且,果然,当他组装他生成的代码并刷写设备时,它第一次工作,他没有在设备上尝试过代码,也没有他写过任何实质性的汇编代码。

    所以,这是两种方法:在 Atomic Object 的情况下,他们用 C 编写软件,用 Ruby 编写测试,并从 Ruby 代码生成测试。在 Ward 的案例中,他用 Java 编写了测试代码,并从 Java 代码生成了 代码

    【讨论】:

    • 我找到了 Ward Cunningham 故事的来源。这是 Bob Martin 叔叔在 RailsConf 2009 上的主题演讲,而不是 Kent Beck 在 RailsConf 2008 上的主题演讲。
    【解决方案2】:

    这就是存根的用途。基本上,您创建一个 Test Double 代表访问昂贵服务(如您的情况)或做其他事情的对象。这允许您在测试时隔离对象并更快地运行测试。

    这不仅仅是为了加快速度。假设您正在编写一些中间件代码来通过 Paypal 进行交易。您可能不想在运行测试时实际使用 Paypal 服务,这可能很昂贵(字面意思)。

    Mocha 适合这种事情。或者只是创建一个对象,其行为类似于您的 Web 服务对象的行为(因为这是 Ruby,如果它像鸭子一样走路......)。

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 2013-08-07
      相关资源
      最近更新 更多