web-dev-qa-db-ja.com

Drupalでテスト駆動開発(TDD)を行う方法

  • Drupal(PHPモジュール、Drupalモジュールなど))でTDDに使用されているツールは何ですか?
  • コミット/テスト/デプロイのワークフローはどのようになっていますか?このワークフローの管理にPhing、PHPUnderControl、Hudsonを使用していますか?
  • ユニットテストはどのようにしてコードの信頼性を高めますか?
  • 別の高価なスタンドアロンの単体テストサーバーが必要ですか、それともラップトップから実行できますか?

Drupal SimpleTestを使用したユニットテストについて、Robertが優れたテクニカルポスト here を書いたことを知っています。ワークフローと構成の部分をカバーすることに興味があります。現在、開発マシン、ステージングサーバー、プロダクションサーバー。プロダクションサイトとステージングサイトの両方が、300MB RAM/300MHz CPU Dreamhost VPSで実行されます。

29
amateur barista

Rubyの世界では、TDDはフレームワークに組み込まれたツールによって促進されます。FactoryGirl、Mocha、rSpecなどにより、開発者は必要なテストケースに対処する簡単かつ動的なテストを作成できます。

DrupalにTDDツールがないことにも私は不満を感じています。それらに関する私の最大の問題は、単一のテストの実行にかかる時間の長さです。反復ごとに60〜90秒かかる個々のテストによって、開発サイクルを遅くすることはできません。まったくテストを作成しなければ、完全なテストスイートは数時間の時間枠で実行されます。

テストが実行されるたびに完全なdbをコピーすることに関係していると思いますが、特にDrupalWebTestCaseを使用してそれを行う必要がある場合は、近い将来、私が言えることから変更されることはないでしょう。

私は Phactory とphpunitを使用してソリューションを一緒にハッキングしています。これはDrupalを手動でブートストラップします。明らかにいくつかの問題に遭遇し、それを完了していませんが、それは実現しています。

幸い、私の仕事のほとんどはバックエンドレイヤーで行われているため、DRUPAL_BOOTSTRAP_DATABASEレベルを維持できます。しかし、私はフルスタックが必要になるより多くの状況で実行しています。

結局のところ、DrupalのTDDは十分にサポートされていないため、独自に記述してdrupalテストフレームワークの外で機能させることができます。業績不振。

-更新-

私は完全にDrupal Phactoryとの統合をセットアップし、Drupal Webテストケースの代わりにphpunitを介してテストを実行しています。それで可能です。

うまくいけば、リリースできるようになり、Phactoryドキュメントに組み込むことができるようになります。

-アップデート2-

Phactoryのセットアップ方法に関するドキュメントは https://github.com/trimbletodd/phactory にあります。

8
trimbletodd

マークのブログはオフラインなので、彼のチームが実装したツールのいくつかについて触れておきます。

機能テスト:セレン
単体テスト:Simpletest
ビルドサーバー:ジェンキンス
パフォーマンスベンチマーク:XDebug + Cachegrind

私がこの質問をしてから2年間で、いくつかの追加のツールがTDDシーンで人気を得ているのを見てきました。今日、あなたがテスト駆動開発について話すとき(Drupalコンテキストではもちろん))同じコインには2つの側面があります。フロントエンドテストとバックエンドテストです。

この問題を表す最新のDrupalcon Portland 2013から際立っている2つのプレゼンテーションを次に示します。

開発、数値による 、バックエンドテスト。
JasmineとPhantomJSによる自動テスト 、フロントエンドテスト。

最初のプレゼンテーションは、ユニットまたは機能テスト(厳密に言えば)とは関係ありません。それは、コードの品質を測定するためのツールに関するものです。それにもかかわらず、それはトピックにいくらか関連していると感じています。

13
amateur barista

私が知っている唯一のことは、寄付されたモジュールについて、問題キュー内のコミットおよびパッチの自動テストを有効にできることです。 http://drupal.org/node/68999 。特に依存関係がある場合は、まだ多少不安定です。

ほとんどのプロジェクトは、おそらくバグ駆動型の開発に沿って何かをしているでしょう。基本的には、バグが見つかったときに最初にテストを記述し、それを修正することになります。もしそうなら;)

私の個人的な経験からすると、DrupalではTDDはかなり難しいです。なぜなら、Simpletestでは単体テストだけを作成するのではなく、ページを表示してフォームを送信する統合テストを作成することが多いからです。したがって、事前に適切なテストを作成することはかなり難しい場合があります。しかし、多分私はそれをすることに慣れていないだけです:)

5
Berdir