質問

テストする最良の方法は何ですか $_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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top