gpt4 book ai didi

php - 如何对 session 包装类进行单元测试?

转载 作者:搜寻专家 更新时间:2023-10-31 22:14:56 24 4
gpt4 key购买 nike

我有简单的 session 包装类,带有 getter 和 setter 来处理 OO 风格的 $_SESSION。 session_start() 在 __constructor() 中调用。对此类进行单元测试的最佳做法是什么?

  1. 当我们从 CLI 运行单元测试时 - 我们无法真正创建 session ,但我们可以在测试设置或测试中的任何其他位置定义 $_SESSION 变量。模拟网络 session 的最佳做法是什么?也许我应该创建某种测试环境并设置所有服务器变量?

  2. PHPUnit_Framework_Error_Warning:E_WARNING:session_start():无法发送 session cookie - header 已发送(输出开始于 C:\Users\Kir\AppData\Local\Temp\phpunit_go_Kir.php:770)- 如何避免这个?如何防止PHP单元测试输出Testing started at 12:59 ...

PS:不好意思提问,我昨天才开始写单元测试,目前经验还不够。

谢谢。

最佳答案

在您的代码中调用 session_start 会将您绑定(bind)到 PHP 的 session_start 实现。实际上, session 的概念在 CLI 中毫无意义。您可以在您的类(class)中使用以下代码保护您的 session_start 调用:

  if (!isset($_SESSION))
{
// If we are run from the command line interface then we do not care
// about headers sent using the session_start.
if (PHP_SAPI === 'cli')
{
$_SESSION = array();
}
elseif (!headers_sent())
{
if (!session_start())
{
throw new Exception(__METHOD__ . 'session_start failed.');
}
}
else
{
throw new Exception(__METHOD__ . 'Session started after headers sent.');
}
}

我将我的 session 类保留为与这段代码有关(加上一个用于 session_id 的简单 id 函数)。由于已防止 session_start 调用,因此可以继续在 CLI 上进行测试。但实际上测试我粘贴的代码很困难。您可以在正常的 CLI 测试之外通过在浏览器下观察来测试它。至少所有其他 CLI 测试现在都不会受到 session_start 调用的影响。

关于php - 如何对 session 包装类进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7645526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com