我有几个应用程序,我想回过头来为它们构建一个测试套件(RSpec & Cucumber),但开始这个过程有点令人生畏。
回到现有的应用程序并为其构建测试套件,您的流程是什么?
发布于 2010-12-16 00:15:34
我最近开始着手向一堆旧代码添加测试,我发现rcov非常有帮助(我不会费心使用rcov rails插件,只要cd就可以测试和运行一个小的shell脚本,该脚本使用正确的排除项运行rcov,如果所有测试都通过,它就会打开报告)。然后,我开始处理那些最接近100%覆盖率的项目,然后一点一点地增加百分比。这比“呃,我该从哪里开始为这个添加测试?!”
发布于 2010-12-13 23:25:06
我会先去添加高级测试(cucumber)。这将使您确信行为不会在未被注意到的情况下改变。我不会去添加rspec测试(或者可能只是几个重要的测试),因为您可能也想要进行很多重构。
然后,运行metrics。MetricFu最近得到了一个名为"HotSpots“的指标,它将结合其他指标,并为您指出代码中最大的故障点。这些地方通常对您的应用程序来说也是最关键的。对它们进行适当的修改,使其具有可读性,这样您就可以很好地了解它是关于什么的。现在还不要着急。
然后,对于您要添加的每个新功能,添加规范并清理一些与之交互的代码。因此,测试和重构新特性的依赖关系,但不要超出这一范围。一小块一小块地做,否则你很快就会失去希望。
发布于 2010-12-13 23:13:52
我最近为客户项目做了很多这样的事情。对我来说,最大的障碍似乎是使用或不使用RJS的内联javascript的泛滥。附注:使用AJAX有正确和错误的方法,大多数人做错了™。对于奇怪的单元测试,我通常会大量使用cucumber和一些rspec。
要考虑的变量多种多样,但最好从模型的几个单元测试开始。创建一些工厂并测试您的验证,以及您认为需要测试的任何自定义行为。
如果你对此不感兴趣,或者你已经有了一套单元测试,并且你想添加集成,那么下一个问题是你在多大程度上做了大量的内联javascript或RJS。如果你的应用是非常"ajaxy“的,你需要从cucumber的selenium驱动开始,它在2月份慢得像糖蜜一样慢,但它会完成这项工作。一旦你有了一套涵盖你的应用程序的全部功能(或者仅仅是重要的东西)的测试,我就可以开始重构javascript,让它不那么显眼地工作。
你可以去的另一个方向是为你的控制器和视图构建额外的rspecs,但是我真的不喜欢这个模式,因为你正在测试实现而不是功能。
重要的是要记住,这并不是所有的事情都必须在一夜之间发生。分析您的工作流(例如,登录、执行任务A、执行任务B等),并确定哪些覆盖了80%的典型用例。首先测试它们。然后使用metric_fu或普通的rcov (或任何其他覆盖工具),找出逻辑密集且未经测试的代码区域。我喜欢metric_fu,因为它运行的工具套件可以为您提供这两部分信息。
https://stackoverflow.com/questions/4430151
复制相似问题