如何在Drupal中进行测试驱动开发(TDD)?


30
  • 在Drupal中使用了TDD的哪些工具(PHP模块,Drupal模块等)?
  • 您的提交/测试/部署工作流是什么样的?您是否使用Phing,PHPUnderControl,Hudson来管理此工作流程?
  • 单元测试以哪种方式使您的代码更可靠?
  • 您是否需要单独的,昂贵的,独立的单元测试服务器,还是可以从便携式计算机上完成?

我知道Robert 在这里写了一篇很棒的技术文章内容涉及使用SimpleTest在Drupal中进行单元测试。我对涵盖工作流程和配置部分更感兴趣。目前,我有一个开发机器,暂存和生产服务器。生产站点和舞台站点均在300MB RAM / 300MHz CPU Dreamhost VPS上运行。

Answers:


8

在红宝石世界中,框架中内置的工具促进了TDD。Factory Girl,Mocha,rSpec和其他工具使开发人员可以轻松动态地创建测试,以解决所需的测试用例。

我也对Drupal中缺乏TDD工具感到沮丧。我最大的问题是运行单个测试所花费的时间。每次测试花费60-90秒的时间进行单独的测试不会降低开发周期。如果您根本不愿意编写测试,则完整的测试套件将花费数小时的时间。

我怀疑它与每次运行测试时复制完整的数据库有关,但是根据我的判断,这不太可能在不久的将来改变,特别是如果您需要使用DrupalWebTestCase这样做的话。

我正在使用Phactory和phpunit 共同破解一个解决方案,该解决方案会手动引导Drupal。显然遇到了一些问题,但还没有完成,但是已经到了。

幸运的是,我的大部分工作都在后端层,因此我可以停留在DRUPAL_BOOTSTRAP_DATABASE级别。但是我遇到了更多需要完整堆栈的情况。

最后,Drupal中的TDD没有得到很好的支持,因此您可以编写自己的DDD以使其在Drupal测试框架之外工作,或者承受较差的性能。

-更新-

我已经成功设置了与Phactory的完整Drupal集成,并且现在通过phpunit而不是Drupal Web测试用例来运行我的测试。因此有可能。

我希望能达到可以发布它的地步,并且可以将其合并到Phactory文档中。

-更新2-

有关如何设置Phactory的文档位于https://github.com/trimbletodd/phactory


感谢您的贡献。Phactory进行单元测试的过程非常有趣。期待看到您正在烹饪的Drupal模块;)
业余咖啡师

我用叉子快速编写了一份有关如何在Drupal中处理Phactory的文档。我向母版提交了一个拉取请求,但尚未将其合并。 github.com/trimbletodd/phactory
trimbletodd

这个问题及其答案仍然持续到今天。您为自己的叉子/解决方案而动摇。因此,先生,您将获得被接受的答案奖。
业余咖啡师,2013年

12

由于Mark的博客处于离线状态,因此我将提及其团队已实现的一些工具:

功能测试:Selenium
单元测试:最简单的
构建服务器:Jenkins
性能基准测试:XDebug + Cachegrind

自从我问了这个问题以来的两年中,我已经看到一些其他工具在TDD领域变得越来越流行。如今,当您谈到测试驱动开发时(当然是在Drupal的环境中),同一事物有两个方面-前端测试和后端测试。

这是最新的Drupalcon Portland 2013代表此问题的两个演示文稿:

开发,按数字,后端测试。
使用Jasmine和PhantomJS进行自动化测试,前端测试。

第一个演示与单元测试或功能测试无关(严格地说),它更多地是用于测量代码质量的工具。不过,我觉得它与该主题有些相关。


1
哇!感谢您2年后回来,让我们知道您的发现!你摇滚:)
Chapabu

5

我唯一了解的是,对于贡献模块,您可以启用自动测试问题队列中的提交补丁程序,请参阅http://drupal.org/node/689990。它仍然有些不稳定,尤其是在您具有依赖性的情况下。

大多数项目可能更多地按照错误驱动的开发方式进行工作,基本上可以归结为在发现错误后首先编写测试,然后对其进行修复。如果有的话;)

根据我的个人经验,TDD在Drupal中相当困难,因为您通常不(仅)使用Simpletest编写单元测试,而是使用集成测试来查看页面和提交表单(而仅使用集成测试)。因此,提前编写好的测试可能相当困难。但也许我只是不习惯这样做:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.