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