優秀なプログラマーも間違いを犯します。良いプログラマと悪いプログラマの違いは、良いプログラマはテストを通じてできるだけ多くのエラーを見つけることができるということです。バグのテストが早ければ早いほど、バグの発見も早くなり、発見して修正するコストも安くなります。これは、リリース直前にソフトウェアをテストすることがなぜ非常に問題があるのかを説明しています。ほとんどのバグは決して見つからず、見つかったバグを修正するのは非常に手間がかかるため、すべてを修正する余裕はないため、それらのバグのみを修正することを優先する必要があります。
PHPUnit を使用したテストは、使用しているアプローチとまったく異なるものではありません。ただ方法が違うだけです。 2 つの違いは、プログラムが正しく動作するかどうかのチェックが、自動的にテストできるコード スニペットのバッチを通じて行われることです。これらのコード スニペットは単体テストと呼ばれます。 このパートでは、まず、印刷されたテスト コードに基づいて自動テストを実行します。 PHP の組み込み配列 Array をテストしたいとします。実行する必要があるテストの 1 つは、関数 sizeof() です。sizeof() 関数は、新しく作成された配列に対して 0 を返す必要があります。新しい配列メンバーを追加すると、sizeof() は 1 を返す必要があります。例 1 は、テストする内容を示しています。
例 1. 配列と sizeof()
<?php を
テストする
$fixture = 配列( );
// $fixture は空である必要があります。
$fixture[] = "要素";
// $fixture には配列メンバーが含まれている必要があります。
?>
最も簡単なテスト方法は、配列メンバーを追加する前後の sizeof() の演算結果を出力することです。0 と 1 が返された場合、Array と sizeof() は正常に動作していることを意味します。
例 2. print ステートメントを使用して Array と sizeof()
<?php を
テストする
$fixture = 配列( );
sizeof($fixture) を出力します。 "n";
$fixture[] = "要素";
sizeof($fixture) を出力します。 "n";
?>
0
1
ここで、テスト プログラムを手動の解釈が必要な状態から自動的に実行する状態に移行します。例 3 では、期待値と実際の値を比較し、それらが等しい場合は ok を出力します。一部の結果が正常ではないことが判明した場合、問題があることがわかります。
例 3. Array と sizeof()<?php
の期待値と実際の値を比較する
$fixture = 配列( );
print sizeof($fixture) == 0 ? "okn" : "not okn";
$fixture[] = "要素";
print sizeof($fixture) == 1 ? "okn" : "not okn";
?>
わかりました
。
期待値が実際の値と異なる場合は、例外をスローします。このようにして、出力はよりシンプルになります。テストが成功した場合は何も行われませんが、未処理の例外がある場合は、何かが間違っていることがわかります。
例 4. アサーション関数を使用して Array と sizeof()
<?php を
テストする
$fixture = 配列( );
assertTrue(sizeof($fixture) = = 0);
$fixture[] = "要素";
assertTrue(sizeof($fixture) = = 1);
関数assertTrue($condition) {
if (!$condition) {
throw new Exception("アサーションが失敗しました。");
}
}
?>
これでテストは完全に自動化されました。最初のバージョンとは異なり、このバージョンではテストが完全に自動化されています。
自動テストを使用する目的は、間違いをできるだけ少なくすることです。コードはまだ完璧ではありませんが、適切な自動テストを行うと、エラーが大幅に減少することがわかります。自動テストにより、コードが公平であるという確信が得られます。この自信があれば、設計に大胆な飛躍をもたらし、チームとの連携を強化し、顧客との関係を改善し、自分の努力のおかげでシステムがより優れていることを証明できるので、毎日安心して眠ることができます。