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


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

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

回答:


8

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

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

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

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

幸い、私の作業のほとんどはバックエンドレイヤーで行われるため、DRUPAL_BOOTSTRAP_DATABASEレベルにとどまることができます。しかし、私はフルスタックが必要になる他の状況に直面しています。

最終的に、DrupalのTDDは十分にサポートされていないため、独自に作成してdrupalテストフレームワーク外で動作させるか、パフォーマンスの低下に耐えることができます。

-更新-

DrupalとPhactoryの完全な統合を正常にセットアップし、Drupal Webテストケースではなくphpunitを使用してテストを実行しています。だからそれは可能です。

うまくいけば、リリースできるようになり、Phactory docに組み込むことができます。

-更新2-

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


ご協力いただき、ありがとうございます。ユニットテストのためにPhactoryで何が起こっているかは非常に興味深いです。Drupalモジュールがあなたが料理してきたことを楽しみにしています;)
アマチュアバリスタ

Drupal内でPhactoryをどのように処理しているかについての簡単なドキュメントをフォークで作成しました。マスターにプルリクエストを送信しましたが、まだ組み込まれていません。 github.com/trimbletodd/phactory
trimbletodd

この質問とその答えは、今でも戻ってきています。あなたはあなた自身のフォーク/ソリューションを転がすために揺れ動く。したがって、あなたは受け入れられた回答賞を受け取ります、サー。
アマチュアバリスタ

12

Markのブログはオフラインであるため、彼のチームが実装したツールのいくつかに言及します。

機能テスト:Selenium
単体テスト:Simpletest
ビルドサーバー:Jenkins
パフォーマンスベンチマーク:XDebug + Cachegrind

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

以下は、この問題を代表する最新のDrupalcon Portland 2013から際立った2つのプレゼンテーションです。

開発、番号別、バックエンドテスト。
JasmineおよびPhantomJSによる自動テスト、フロントエンドテスト。

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


1
うわー!あなたが発見したことを私たちに知らせるために2年後に戻ってきてくれてありがとう!あなたがロック:)
チャパブ

5

私が知っている唯一のことは、提供されたモジュールについて、問題キューでコミットパッチの自動テストを有効にできることです。http://drupal.org/node/689990を参照してください。特に依存関係がある場合は、やや不安定です。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.