2016-07-25 61 views
1

我与我的整个职业生涯中的测试/ tdd有过爱/恨的关系。最近,我已经开始享受编写测试,通过放弃断言陈述。这对我来说在世界上都有所不同。原因如下:与TDD苦苦挣扎的人如何看待断言?

  • 当我没有写任何测试时,速度接近于原来的位置。

  • 我不要浪费时间试图使断言(FOO,2)或!断言(富,无)逻辑在每次测试结束

  • 我只是把foo.inspect在年底测试,运行它,并继续工作

  • 下一个程序员仍然有一个很棒的小测试,显示我的意图,并知道此代码是在一个点工作或它不会存在。

  • 当测试失败时没有打破构建,因为没有断言测试永远不会失败。

  • 测试不是每周7天每天24小时运行一次又一次地抓到一些东西。他们在那里,当你想调试一些代码,并留下非常漂亮的笔记给下一个程序员(也许你)

  • 随着岁月的流逝和测试中断,没有技术债务可以支付。测试总是在那里作为代码的考古遗迹,在某个时间点向控制台提供一些有用的信息。

我的问题是,这是否像一个已知的测试风格?因为我刚发现它不是必要的。但TDD的人使用这个系统吗?

+1

当测试失败时没有打破构建,因为没有断言测试永远不会失败。在这种情况下测试点是什么?如果新的开发人员会做出改变,并且想要运行测试来检查没有任何事情发生 - 他总能得到绿色测试。 – Fabio

+1

“测试失败时不会破坏构建”-imo这是测试的好处之一,我们有信心进行重构,并且测试告诉我们是否已经无意中破坏了任何东西。同样为了明确意图,有一个断言陈述对下一个人(甚至当我回来测试时)是非常有帮助的。有了断言,就不那么需要去调试了,我发现效率低得多。 – gezzahead

+0

对,但我的观点是那些断言花费宝贵的时间来思考和创作。没有他们,我可以通过我的测试飞行。几个月后他们最终只是技术性债务。我同意这是一种不同的思考方式,你放弃了“一切都是绿色”的感觉。但男孩我更喜欢它。 –

回答

1
  • 速度是相对的:)你在调试
  • 不写断言,如果你不”想缩腰的时间。只测试所需要的
  • 没有oppinion在这个问题上我不知道什么是.inspect
  • 做它或者是有什么样的意见为
  • 恕我直言,测试应在启动失败,你写的代码,以便它如果你没有任何编程,将无法运行该测试不会失败

    $returnVar = myClass->methodReturnsTrue(); 
    $this->assertTrue($returnVar); 
    

    (这是第一步)

    写信,使其工作

    代码0
    class myClass 
    { 
        public function methodReturnsTrue() 
        { 
        return true; 
        } 
    } 
    

    现在已修好。测试运行并测试您的代码。你现在可以反复运行它。没有它失败

  • 你不必运行测试24/7,但只有在代码更改(新功能或错误修复)使用CI。

  • 遗迹确保你的代码在20年前仍然做到了。当然,重构你必须重新思考测试。但最终他们确保你不会破坏你已经忘记或从未有过的新功能
0

单元测试的一个很大的优点是一旦它们被写入,可以自动运行数百或数千次,而无需额外的工作。

正是这样,持续集成如此强大。自动运行测试,然后经常运行它们。这样,当您添加新代码或重构时,如果现有代码已被破坏,您将获得快速反馈。

良好的自动化单元测试覆盖率的存在消除了更改代码的一些担心。这会鼓励更频繁的重构,并且通常会产生更好的质量代码库。

如果你编写的单元测试必须手动运行,那么你就失去了这个优势。