web-dev-qa-db-ja.com

PHPで統合テストを実行する方法は?

私は現在、(PHPUnitとJenkinsを使用して)コードの単体テストを実行していますが、統合テストについて多くのことを読みました。

  • PHPでこれを実行するためのツール(できれば自動化されたもの)はありますか?

  • どうすれば実装できますか?どこかに良いチュートリアルはありますか?

23
JoshB

基本的には、ユニットテストに加えて、単一のユニットをテストするだけでなく、ユニットのグループのようにまとめられた模擬テストを実装することもできます。これらは、入力を入力しながら特定の方法で動作する論理ユニットと見なされます。またはメソッドの呼び出し。

このための1つの可能なライブラリは、Googleコードリポジトリの yaymock です。そのphp5モックライブラリ。

さらなる統合テストは、多かれ少なかれ、完全なシステム動作をテストするテストにすぎません。基本的なことは、テスト環境をセットアップし、後でアプリケーションをデプロイすることです。この種のテストは、単体テストフレームワークまたはモックライブラリを使用して行うこともできます。あなたの好きなように。あなたの場合の統合テストの詳細は、データベース内のいくつかのデータと予想される「html」出力に基づくhttpリクエストです。

これを自動化するために、いくつかの継続的インテグレーションフレームワークを使用できます... Hudson、Arbit、またはphpUnderControlのいずれか。ハドソンといくつかの素晴らしいテストプラグインを使用してphpを設定するには、かなり良い チュートリアル があります。また、コードカバレッジチェックなど、環境内に統合できる便利なプラグインについても説明します。

5
fyr

何年も後...ユニット、統合、機能テストを実行できるようになった Codeception フレームワークがあります。

Codeceptionは、テストを実行するためのバックエンドとしてPHPUnitを使用します。したがって、任意のPHPUnitテストをCodeceptionテストスイートに追加できます。

単体テストでは、データベースアクセス、ファイルシステム、HTTPリクエスト、およびその他のコンポーネントをモックして、コードを分離し、高速化します。
統合テストでは、コードを個別に実行する必要はありません。つまり、これらのコンポーネントを実際に使用して、期待されたものの出力/結果。

説明のために、 Codeception DOC からのこの統合テストの例を見てください。

<?php
function testSavingUser()
{
    $user = new User();
    $user->setName('Miles');
    $user->setSurname('Davis');
    $user->save();
    $this->assertEquals('Miles Davis', $user->getFullName());
    $this->tester->seeInDatabase('users', ['name' => 'Miles', 'surname' => 'Davis']);
}