我在为简单的会话包装器编写单元测试时遇到问题.
该类本身具有一些基本功能集,get,exists等.
所有这些函数都有一个checkrtSessionStart检查,它执行以下操作:
protected static function assertStarted()
{
if (strlen(session_id()) < 1) {
throw new Exception("Some text here");
}
return;
}
在编写单元集时,我有以下setUp和tearDown方法.我有这些因为我希望每个运行的测试都有一个新的会话环境.
protected function setUp() {
session_start();
}
protected function tearDown() {
session_destroy();
}
现在问题,我想要一个测试方法,当我没有开始会话时尝试使用set时失败.为了做到这一点,我将不得不销毁在setUp中启动的会话.像这样:
public function testGetWithoutSession() {
session_destroy();
$this->setExpectedException('Exception');
ESL_Session::set('set', 'value');
session_start();
}
然而,这会发出警告“试图破坏未初始化的会话”.当我把一个echo session_id()放在session_destroy前面时 – 它告诉我我有一个有效的会话.
有没有人有经验单元测试会话包装?
附加信息:
> PHP版本5.3.6
> Linux
解决方法:
这是因为在这一点上:
session_destroy();
$this->setExpectedException('Exception');
ESL_Session::set('set', 'value'); // HERE <----
session_start(); // This is not called anymore!
有一个例外和session_start();不再被称为.
我的建议是更改为将tearDown更改为仅在有活动会话时调用session_destory.所以在tearDown“只有你必须清理”.