依赖会话/cookie信息的单元测试功能的默认实践是使用抽象库。但是,如果我想编写和单位测试这个抽象库怎么办? PHP的文档 setcookie功能 说cookie将根据下一个请求提供。使用命令行工具进行测试,没有“请求”之类的东西。那么如何设置正确的cookie设置?

我想测试是否所有参数 setcookie 我的抽象库正确设置了功能。这些参数将根据某些条件和方法调用设置。

我唯一能想到的解决方案是嘲笑 setcookie 功能 runkit 扩展,我不想安装。其他想法?

有帮助吗?

解决方案

我找到了另一个非常简单的解决方案: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.

其他提示

您可以将值直接设置为当前$ _COOKIE数组:

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

(这也以CLI模式起作用)。请注意,$ _request不会通过此更新。

但是,如果您只想操纵cookie,以便随后可以访问会话,为什么不直接访问会话:

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

但是我们在这里谈论的是单位测试 - 不是集成测试 - 这表明该代码结构不太好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top