まず第一に、私自身の理解によると、TDD と BDD の違いは何ですか?
1 つ目は考え方の違いです。従来の TDD はインターフェイスが正しく実装されているかどうかに重点を置いているため、通常、各インターフェイスには対応する単体テスト クラスがあります。 BDD はストーリー テンプレートとシナリオを使用して、ユーザーが製品を操作するときの製品の特定の機能パフォーマンスを記述します。これは従来のユース ケースに似ています。 BDD テストの作成は、テスターが通常作成するテスト ケースに似ています。 BDD は一般的に自然言語で表現されているため、開発者でなくても理解できます。以下は BDD の例です:
Behat は PHP の BDD フレームワークであり、PHPUnit で使用できます。
より詳しい紹介については、behat の公式 Web サイト http://behat.org/
をご覧ください。
Web アプリケーションの自動テストを行う場合、TDD を使用するか BDD を使用するかにかかわらず、インターフェイス テストに遭遇するといくつかの問題が発生します。
通常、解決策は 2 つあります:
1. GUI テストをバイパスします。ほとんどの Web 開発では MVC フレームワークが使用されているため、MVC の原則に従って、コントローラーはタスクを完了するために正しいデータをビューに渡すだけで済みます。したがって、テストを行う場合は、Controller が指定された View に正しいデータを渡すかどうかを確認するだけで済みます。View がデータを正しく表示できるかどうかは、検証する結合テストに依存します。
2. GUI テスト フレームワークまたはブラウザ エミュレータを使用します。今回はブラウザエミュレータの使い方についてお話します。
ブラウザシミュレータは大きく2種類に分けられます:
• ヘッドレス ブラウザ エミュレータ - コンソールを介して GUI を使用せずに完全に実行できるブラウザ エミュレータ。このようなエミュレータは、高レベル (HTTP スタック) では HTTP リクエストを実行し、ブラウザ アプリケーションをエミュレートできますが、低レベル (JS、CSS) では完全に制限されています。ただし、ページを開いたりリンクをクリックしたりするために CSS を解析したり JS を実行したりする必要がないため、実際のブラウザよりもはるかに高速です。
• 簡単に言えば、このエミュレータは実際のブラウザよりも高速ですが、CSS や JS を処理できません。
• ブラウザ内エミュレータ - このエミュレータは実際のブラウザで動作し、ブラウザを完全に制御し、テストのニーズに合わせてゾンビとして使用します。これにより、標準の完全に構成された実際のブラウザが得られ、これを制御できるようになります。 CSS スタイル、JS および AJAX の実行 - すべてがすぐにサポートされます。
• このシミュレータは実際のブラウザに近く、CSS と JS を扱うことができますが、速度は最初のものよりも比較的遅くなります。
しかし実際には、実際にテストを行う場合、通常は両方のシミュレータが必要になります。すべてのテストにブラウザ内シミュレータを使用することはできません。テストが多数ある場合、速度が耐えられないほどになるからです。ただし、同様の Ajax リクエストをテストする必要がある場合は、ヘッドレス シミュレーターを使用できず、ブラウザ内シミュレーターを使用する必要があります。
2 つのシミュレーターは大きく異なり、それぞれに異なる API があるため、テストに 2 つの API セットを同時に使用するのは非常に面倒です。
このとき、MINK は同じ API セットでブラウザ内シミュレータとヘッドレス シミュレータの両方をサポートするブラウザ シミュレータ抽象化レイヤーであるという利点が現れます。
以下では、Behat と MINK を使用して WEB アプリケーションの BDD を行う方法を紹介します。
1.Behatをインストールします
$ pear チャンネル-discover pear.symfony.com
$ pear チャンネル-discover pear.behat.org
$ pear インストール behat/behat
2.MINK
をインストールします
$ pear チャンネル-discover pear.behat.org
$ pear インストール behat/mink-beta
3. 新しい sosabaike ディレクトリを作成し、sosozhidao ディレクトリに入り、behat --init コマンドを実行します
$ mkdir そそばいけ
$cdそそばいけ
$ behat --init
現時点では、behat は features ディレクトリと features/bootstrap/FeatureContext.php ファイルの作成に役立ちます
FeatureContext.php は、単体テストの実際のメソッドが保存される場所です
4. features/search.feature ファイルを作成します
ただし、MINK を使用せずに behat コマンドを直接実行する場合、behat はいくつかのテスト メソッドを features/boostrap/FeatureContext.php に追加することを提案します。これらのテスト メソッドでアサーションを作成するには、Selenium などのスクリプトを使用する必要があります。
5. ただし、MINK を使用する場合は、はるかに簡単です。features/bootstrap/FeatureContext.php ファイルを変更するだけです。
コードを 2 行追加します。a) require_once 'mink/autoload.php';
b) FeatureContext の親クラスを BehatContext から BehatMinkBehatContextMinkContext に変更します
6. behat -dl コマンドを実行します。すべてが正常であれば、次のような結果が表示されます。
上記は実際にMINKでサポートされているAPIの一部です。
7. behat features/search.feature コマンドを実行すると、次の結果が表示されます
現時点では、BDDテストが完了していても、全体のプロセスは非常にシンプルで、テストケースを書くよりも時間はかからず、テストケースにはない機能、つまり検証機能を自動的に実行できます。 。
したがって、テストを行う学生は、テストケースの代わりにこの方法を試してみると、時間を大幅に節約できると個人的に思います。
開発を学ぶ学生の場合、Web アプリケーションの BDD または TDD を行う場合は、GUI テストをバイパスするソリューション、つまりコントローラーのみをテストするソリューションを使用する必要があると個人的に思います。
理由は以下の通りです。
1. 開発者とテスターは、テストの実行速度に対する要件が異なります。テスターは、テストを開始してから他の作業を行い、後で結果を確認するだけで十分です。しかし、開発者は異なります。コードを変更するたびに、完全なテストを実行して、変更によって他の機能が破壊されないことを確認する必要があります。完全なテストの実行に時間がかかる場合、単体テストを実行したい開発者もいます。 MINK を使用すると実際のブラウザでアクセスするよりも高速ですが、常に実際の製品コードにアクセスするため、多くのテストがデータベースにアクセスすることになり、すべてのテストを実行するには非常に時間がかかります。
2. MINK を使用すると実際の製品コードにアクセスするため、関連する環境 (依存ライブラリ、データベースなど) を設定する必要があり、データベースを初期状態に戻す必要もあります。構成リンクにエラーがある限り、最初は合格した単体テストが失敗する可能性があります。これは、優れた単体テストの基準を満たしていません。優れた単体テストは、実行するたびに一貫した結果を保証する必要があります。この効果を実現するには、外部条件 (データベース、ネットワークなど) に依存することはできません。これらの外部条件は、コードを使用して可能な限りシミュレートする必要があります。
NEEさんのブログより抜粋