web-dev-qa-db-ja.com

PHPUnit&Behat;補完または代替?

私はSOとGoogleを見回してきましたが、決定的な答えを得ることができませんでした。

PHPUnitは、JUnitのように、ユニットテスト用のフレームワークです。機能テスト用のSelenium拡張機能と組み合わせて使用​​します。ブラウジングしていると、Behat/Minkが言及され続けているのがわかります。しかし、私はBehatがここにどのように適合するかを完全には理解していません。

Behatを使用すると、人間が読める形式でシナリオを作成できます。 Behatはそれを新しいプロジェクトのスケルトンクラスに変換できますか?しかし、単体テスト用のスケルトンクラスも提供しますか? Behatを使用してユニットテストを作成しますか、それともPHPUnit/SimpleTestを使用しますか?

しかし、Behat/Minkは機能テストのためにPHPUnit_Selenium-extensionを置き換えますか?

Behatは新しいプロジェクトにのみ使用しますか、それとも既存のプロジェクトに適応させることもできますか?

30
qrazi

はい、一般的なコードテストとブラウザー自動化を使用した機能テストの両方で、BehatはphpUnitの代替と見なします。

一般的なテストでは、phpUnitはより確立された製品ですが、Behatは「BDD」手法(ビヘイビア駆動設計)を使用して作成されたテストに重点を置いています。 phpUnitにはBDD機能もありますが、Behatはそのスタイルをはるかに対象としています。

単体テストではなく機能的なブラウザーテストについて話しているので、おそらく、それらが持つより強力な単体テスト機能のいくつかについては考えていません。あなたはただブラウザの自動化を書きたいだけです。このために、あなたは本当にあなたに最も適した2つのどちらかを選ぶことができます。

それぞれが他よりも優れている微妙なエッジケースがありますが、ほとんどの場合、両方ともさまざまなブラウザでテストスクリプトを実行できます。

私の好みは、より柔軟であるという理由でBehat/Minkに行きます。 SeleniumやSahiなど、いくつかのブラウザ自動化エンジンをサポートできます。つまり、一方に問題が発生した場合は、テストをもう一方に切り替えて続行できます。いくつかのミンクテストスクリプトをSeleniumで動作させようとして、この正確な状況が発生しました。 Sahiに切り替えることで機能し、テストコードを1行だけ変更する必要がありました。

BDDスタイルのテストを作成したくない場合は、BehatなしでMinkを単独で使用できることも追加する価値があります。

13
SDC

BehatはPHPunitにとって補完的だと思います。動作のテストにはBehatを使用し、コードのテストにはPHPUnitを使用することで補完的です。 BDD/TDDを使用して、最初にユーザーストーリーに基づいてテストを作成します。テストに合格するには、通常、TDDを使用していくつかのPHPUnitテストを作成し、BDDテストに合格できるアプリケーションを作成します。

BDDは動作をテストし、エンティティ/コントローラー/インターフェイスなどのアプリケーションのコードを認識しないようにする必要があります。アプリケーション全体を別のアプリケーションと交換しても、アプリケーションの動作が同じ場合でもすべてのテストに合格できるはずです。

TDDは、あなたの心のような他のものに加えて、クラスの構造とそれらの間の相互作用を導く必要があります。それに加えて、彼らはあなたの方法が彼らがすべきことをすることを証明し、意図を明確にし、恐れることなくリファクタリングすることを可能にします。

35
Jop van Raaij

この答えはすべて間違っているようです。

phpunitはユニットテストであり、それによってTDDに準拠しています。

phpspecとbehatは機能テストなので、BDDです。

それらは互いに補完し合います。完璧なシナリオは、両方のタイプのテストを行うプロジェクトですが、これは、それを実行できる大規模なプロジェクトにのみ制限される可能性があります。

TDDは、単一またはいくつかのクラスをテストします。 BDDは、アプリケーション内の複数のモジュールにわたって完全な機能をテストします。

6
useless