6

セッション/Cookie 情報に依存するユニット テスト機能のデフォルトのプラクティスは、抽象化ライブラリを使用することです。しかし、この抽象化ライブラリを作成して単体テストしたい場合はどうすればよいでしょうか? PHPsetcookie関数のドキュメントには、次のリクエストで Cookie が使用可能になると記載されています。テスト用のコマンド ライン ツールを使用する場合、「要求」などはありません。では、正しい Cookie 設定を単体テストするにはどうすればよいでしょうか。

setcookie関数のすべてのパラメーターが抽象ライブラリによって正しく設定されているかどうかをテストしたいと思います。これらのパラメーターは、特定の条件とメソッド呼び出しに従って設定されます。

私が考えることができる唯一の解決策は、インストールしたくない拡張setcookie機能で関数をモックすることです。runkit他のアイデア?

4

2 に答える 2

11

別の非常に単純な解決策を見つけました。PHP関数のクラスラッパーsetcookieは非常に単純で、単体テストする必要はありません。

/**
 * Wrapper around setcookie function for better testability
 */ 
class Cookiesetter {
  public function setcookie($name, $value = "",  $expire = 0,  $path = "", 
    $domain = "", $secure = false, $httponly = false) {
    return setcookie($name, $value,  $expire, $path, $domain, $secure, $httponly);
  }
}

その後、setcookieメソッドをモックすることができます。これには、のような他のメソッドを実装できるという追加の利点がありexpireCookieます。

于 2010-12-21T13:13:10.270 に答える
3

現在の $_COOKIE 配列に値を直接設定できます。

<?php
$_COOKIE['test']='hello';
print_r($_COOKIE);
run_tests();

(これは CLI モードでも機能します)。これによって $_REQUEST が更新されないことに注意してください。

ただし、後でセッションにアクセスできるように Cookie を操作するだけの場合は、セッションに直接アクセスしないでください。

<?php
$_SESSION['auth_user']='root';
run_tests();

しかし、ここで話しているのは単体テストであり、統合テストではありません。これは、コードが十分に構造化されていないことを示唆しています。

于 2010-12-21T13:25:47.287 に答える