我在 Ruby on Rails 上做一份合同工作,这主要是因为编写测试而导致生产力的灾难。这是我第一次在实践中使用 TDD,它并不顺利,因为我花了很多时间编写测试,几乎没有任何结果可以显示。我在想,也许我试图通过为每个模型和控制器中的每个功能编写测试来测试太多。
如果我无法达到 100% 的测试覆盖率,我可以使用哪些标准来确定“此功能是否值得测试”?例如,集成测试会胜过单元测试吗?
我在 Ruby on Rails 上做一份合同工作,这主要是因为编写测试而导致生产力的灾难。这是我第一次在实践中使用 TDD,它并不顺利,因为我花了很多时间编写测试,几乎没有任何结果可以显示。我在想,也许我试图通过为每个模型和控制器中的每个功能编写测试来测试太多。
如果我无法达到 100% 的测试覆盖率,我可以使用哪些标准来确定“此功能是否值得测试”?例如,集成测试会胜过单元测试吗?
如果您刚刚开始在 ruby 或 Rails 世界中进行测试,我会提出以下建议:
这些只是我在类似情况下的一些观察。祝你好运,测试会很有趣!不完全是。我是认真的。
100% 的测试覆盖率是一种幻想和浪费时间。你的测试应该有一个目的,通常是为了让你相信你编写的代码是有效的。不是绝对的信心,而是一定程度的信心。TDD 应该是一种工具,而不是一种限制。
如果它不能让你的工作变得更好,你为什么要这样做?更重要的是,如果你不能生成有用的代码并失去合同,那么这些测试毕竟不是很有用吗?这是一种平衡,听起来你站在错误的一边。
如果您是 Rails 新手,您可以在这篇 37signals 博客文章中了解其固执己见的创建者对测试的看法。小经验法则,但也许可以将您推向该主题的新方向。
还有关于改进 RSpec 使用的很好的参考资料,例如betterspecs.org、The RSpec Book和Everyday Rails Testing with RSpec。使用不当可能会导致维护规格令人头疼。
我的建议是尝试让您的测试和您的代码编写尽可能紧密耦合,并结合项目的敏捷方法。
通过这种方式,您将不断有新的东西向客户展示,因为测试刚刚开始。我看到的最大的错误是,对于刚接触测试的团队来说,继续将测试视为一项单独的活动。最重要的是,我继续看到开发人员说一个功能已经完成......但需要在“某些点”进行一些重构和一些更好的测试。“某个点”很少出现。但有一件事是不可避免的——至少在几个月内,它在短期内会慢得多,但质量会好得多,而且你会避免建立我在许多大型机构中出现的“大泥球”。
一些东西:
别
做
对于模型:
对于控制器:
对于视图:
我还没有开始测试视图,但我遇到了我希望这样做的情况。例如表单中的测试字段。
Rails 指南中的更多内容