5

でテスト$_GETして$_POST入力する最良の方法は何PHPUnitですか?

入力をサニタイズするクラスがあり、偽のデータを処理するときに正しく機能することを確認したいと考えています。フォーム変数を設定する簡単な方法はありますか、PHPUnitまたはフォーム変数が供給される二次クラス/関数に検証を渡して間接的にテストする必要がありますか?

4

1 に答える 1

16

依存性注入のアイデアを見てみましょう。一言で言えば、必要なデータを取得するのではなく、必要なものをコードにフィードする必要があります...例を次に示します。

依存性注入なしの例

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ます。とにかくassoc配列であるため、本番コードでは関数に渡すことも、関数に渡すこともでき$_POSTますが、単体テストでは、予想されるデータをハードコーディングします。$_GET$_GET$_POST

ユニットテストの例:

function testSanitize() {
  $fakeFormData = array ('bio' => 'hi i\'m arin', 'location' => 'San Francisco');
  sanitize($fakeFormData);
  // assert something
}
于 2008-09-25T22:57:41.917 に答える