Web アプリケーションは 24 時間年中無休で実行されるため、プログラムがまだ実行されているかどうかという疑問が夜になると気になります。単体テストのおかげで、自分のコードに十分な自信が持てるようになり、よく眠れるようになりました。
単体テストは、コードのテスト ケースを作成し、これらのテストを自動的に実行するためのフレームワークです。テスト駆動開発は、まずテストを作成し、そのテストでエラーが検出できることを確認し、その後で初めて、これらのテストに合格する必要があるコードの作成を開始するという考えに基づいた単体テストのアプローチです。すべてのテストに合格すると、開発した機能が完成します。これらの単体テストの価値は、コードをチェックインする前、大きな変更後、実行中のシステムへの展開後など、いつでも実行できることです。
PHP単体テスト
PHPの場合、単体テストフレームワークはPHPUnit2です。このシステムは、PEAR コマンド ライン % pear install PHPUnit2 を使用して、PEAR モジュールとしてインストールできます。
このフレームワークをインストールした後、PHPUnit2_Framework_TestCase から派生したテスト クラスを作成して単体テストを作成できます。
モジュール単体テスト
単体テストを始めるのに最適な場所は、アプリケーションのビジネス ロジック モジュールであることがわかりました。簡単な例を使用します。これは 2 つの数値を合計する関数です。テストを開始するには、まず以下に示すようにテスト ケースを作成します。
リスト 1.TestAdd.php
<p><?php <br>require_once 'Add.php';<br>require_once 'PHPUnit2/Framework/TestCase.php';</p><p>class TestAdd extends PHPUnit2_Framework_TestCase<br>{<br>function test1() { $this->assertTrue( add( 1, 2 ) == 3 ); }<br>function test2() { $this->assertTrue( add( 1, 1 ) == 2 ); }<br>}<br>?></p> ログイン後にコピー |
この TestAdd クラスには 2 つのメソッドがあり、どちらもテスト プレフィックスを使用します。各メソッドはテストを定義します。テストはリスト 1 のように単純なものもあれば、非常に複雑なものもあります。この場合、最初のテストでは 1 プラス 2 は 3 に等しく、2 番目のテストでは 1 プラス 1 は 2 に等しいと単純に主張します。
PHPUnit2 システムは、パラメーターに含まれる条件値が true かどうかをテストするために使用されるassertTrue() メソッドを定義します。次に、Add.php モジュールを作成しましたが、最初は誤った結果が生成されました。
リスト 2.Add.php
<p><?php <br>function add( $a, $b ) { return 0; }<br>?></p> ログイン後にコピー |
ここで、単体テストを実行すると、両方のテストが失敗します。
リスト 3. テストの失敗
<p>% phpunit TestAdd.php<br>PHPUnit 2.2.1 by Sebastian Bergmann.</p><p>FF</p><p>Time: 0.0031270980834961<br>There were 2 failures:<br>1) test1(TestAdd)<br>2) test2(TestAdd)</p><p>FAILURES!!!<br>Tests run: 2, Failures: 2, Errors: 0, Incomplete Tests: 0.</p> ログイン後にコピー |
これで、両方のテストが機能していることがわかりました。したがって、add() 関数を変更して実際の処理を行うことができます。
<p><?php <br>function add( $a, $b ) { return $a+$b; }<br>?></p> ログイン後にコピー |
これで両方のテストに合格しました。
リスト 4. テストに合格しました
<p>% phpunit TestAdd.php<br>PHPUnit 2.2.1 by Sebastian Bergmann.<br>..<br>Time: 0.0023679733276367<br>OK (2 tests)<br>%</p> ログイン後にコピー |
このテスト駆動開発の例は非常に単純ですが、そこからそのアイデアを理解することができます。最初にテスト ケースを作成し、テストを実行するのに十分なコードがありましたが、結果は間違っていました。次に、テストが実際に失敗することを確認し、実際のコードを実装してテストを成功させます。
コードを実装するときに、すべてのコード パスをカバーする完全なテストが完了するまで、コードを追加し続けることに気付きました。この記事の最後には、作成するテストとその作成方法に関するアドバイスが記載されています。
1