我通过命令行运行我的单元测试,它工作正常。如何在PHP中单元测试会话变量?
但这里的问题是,当我测试包含读会话变量代码的函数,我得到一个null值..
我的猜测是,你不能访问会话变量时,你是不是在浏览器中。 。
我该怎么用PHP做这件事? 这可能吗?
通过使用笨1.7.2 IM的方式CIUnit v0.17
任何建议或评论将是对我很大的帮助..
感谢
我通过命令行运行我的单元测试,它工作正常。如何在PHP中单元测试会话变量?
但这里的问题是,当我测试包含读会话变量代码的函数,我得到一个null值..
我的猜测是,你不能访问会话变量时,你是不是在浏览器中。 。
我该怎么用PHP做这件事? 这可能吗?
通过使用笨1.7.2 IM的方式CIUnit v0.17
任何建议或评论将是对我很大的帮助..
感谢
我使用一个类的菲尔建议的会议。如果手动调用session_start(),则会将代码绑定到PHP会话实现。我要在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.');
}
}
编辑:
上面的代码将进入您的会话类(也可能是被它的构造以某种方式调用)。命令行PHP创建一个数组而不是调用session_start(这在命令行上不起作用)。
当测试代码依赖于会话变量我嘲笑会话变量在我的测试:
$_SESSION = array('key1' => 'value you want', 'key2' => 'etc.');
这允许您测试您将收到页面上的所有可能的会话设置。
测试会话值是否创建属于创建它们的代码,因此嘲笑它们的存在对我来说似乎没问题。通过这种方式,您可以单独测试每个单元,而不是将它们组合起来,并在测试之间保持会话值。
感谢保罗的答复。这是否意味着我会自己创建会话课程?我如何访问已经存在的会话变量?因为Im在命令行中获得空值,但在浏览器中获取正确的值。我的单元测试是通过命令行运行的。 –
我会用这些细节填写我的答案。 – Paul
非常... –
我会将会话数据访问包装在一个专门的类中,并在测试中模拟。 – Phil
CI会话是事实上的饼干,所以是的,他们在浏览器中工作 –
感谢Phil和Damien的回复.. @Phil我该怎么做?所以对不起我完全noob这个..我可以问一个例子或程序,如果它可以与你.. thx –