PHPUnit でのフォーム入力のテスト
-
02-07-2019 - |
質問
テストする最良の方法は何ですか $_GET
そして $_POST
の入力 PHPUnit
?
入力をサニタイズするクラスがあり、偽のデータを処理するときにそれが正しく動作することを確認したいと考えています。フォーム変数を設定する簡単な方法はありますか? PHPUnit
それとも、フォーム変数が供給される二次クラス/関数に検証を渡して間接的にテストする必要がありますか?
解決
という考え方を見てみましょう 依存関係の注入. 。一言で言えば、コードに必要なデータを取得するのではなく、必要なものをコードに供給する必要があります...以下に例を示します。
依存性注入を使用しない例
function sanitize1() {
foreach($_POST as $k => $v) {
// code to sanitize $v
}
}
sanitize1();
依存性注入の例
function sanitize2(array &$formData) {
foreach($formData as $k => $v) {
// code to sanitize $v
}
}
sanitize2($_POST);
違いを見ます?PHPUnit テストに合格できる sanitize2()
選択した連想配列。依存関係を注入しました。一方 sanitize1()
と結合されています $_POST
. $_POST
そして $_GET
とにかく連想配列であるため、本番コードで渡すことができます $_GET
または $_POST
関数に追加しますが、単体テストでは、予期されるデータの一部をハードコーディングします。
単体テストの例:
function testSanitize() {
$fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco');
sanitize($fakeFormData);
// assert something
}
所属していません StackOverflow