1
我需要测试一个PHP Web应用程序。应用程序是一个程序代码块(在index.php中),由会话变量控制。通过控制流确定,其他文件也包含在程序块中(xy.inc)并修改会话变量。例如: -
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: text/html; charset=utf-8");
session_name("some_name");
session_start();
$_SESSION['some_key'] = 'some_value';
if($_SESSION['key1'] == 1){
//include some file that in the end sets $_SESSION['key1'] = 0
}
else if($_SESSION['key2'] == 1){
//Do something
$_SESSION['key2'] = 0;
$_SESSION['keyX'] = 'someOtherControlValue';
}
//....Lots of code
$SESSION['whatever'] = 'justAnotherValue';
//..more code, more $_SESSION checks and so on
重构是没有选择(目前?),所以我只是想获得至少一些基本的测试运行,而不与编码器的“编程风格”的干扰。
在验收测试中是否有访问(和修改)$ _SESSION属性的方法? 我想为我的测试使用Codeception(但我打开替代方案)。
我要实现类似的信息(伪)
// setup test db etc.
get('/');
assert(title == 'the title');
// change some control values
$_SESSION['myDatabase'] = 'myTestdb';
$_SESSION['SomeKeyForFuctionIWantTest'] = 'myValue';
get('/');
assert($_SESSION['SomeKeyForFuctionIWantTest'] == 'myValue');
assert(getSomeElementCreatedByFunction() != null);
assert(somethingIsInTheDatabase);
我在PHP和会话管理(我在面向对象的编码)一点经验,任何人都可以帮我吗?
侧面说明:没有框架,MVC或其他任何参与
你想改变中旬执行的会话数据或将装上的session_start一组不同的()就足够了?在第一种情况下:真的吗?为什么?在后一种情况下:也许编写和设置另一个[会话处理程序](http://docs.php.net/session_handler)将会起作用。 – VolkerK
@VolkerK: 我需要在读取页面后读取和写入会话值(所以PHP已经执行),如 1.读取会话并修改var x 2.载入页面'/',它使用var x并设置一些其他的变数 3.读会话并修改变量 4.加载页面'/'(...) 我必须知道页面加载(会话状态)之间的当前状态 您能否给我关于如何将自定义SessionHandler集成到index.php中的最简单示例?它只是在类中调用session_set_save_handler(),还是必须修改index.php才能真正使用类? – mrong