gpt4 book ai didi

php - 无法进行单元测试 : $_SESSION empties before each test is ran

转载 作者:可可西里 更新时间:2023-10-31 23:24:52 26 4
gpt4 key购买 nike

我无法对我的代码进行单元测试。

$_SESSION 每次运行下一个测试时都会清除。当我运行 testStartProductSession() 时,我的对象将一些数据添加到 $_SESSION 变量。但是当我运行下一个测试方法( testSessionIdIsKept() )时 $_SESSION 再次为空。

看起来 $_SESSION 在单元测试时变成局部变量。

我不知道还能做什么。请检查以下输出:

// session_start() on bootrap.php;

class MC_Session_ProductTest extends PHPUnit_Framework_TestCase
{

/**
* @return MC_Session_Product
*/
public function getObject()
{
// make getInstance() return new instance instead of singleton instance
MC_Session_Product::$isUnityTest = true;
$object = MC_Session_Product::getInstance();
$object->getWsClient()->setServerListUrl(SERVER_LIST_URL);
return $object;
}

/**
* All tests pass
* @depends testSetParam
*/
public function testStartProductSession()
{
$developerId = PARAM_DEVELOPER_ID;
$productCode = PARAM_PRODUCT_CODE;
$productVersion = PARAM_PRODUCT_VERSION;
$platform = PARAM_PLATAFORM;
$deviceType = PARAM_DEVICE_TYPE;
$locale = PARAM_LOCALE;

try {
$object = $this->getObject();
$object->startSession($developerId, $productCode, $productVersion,
$platform, $deviceType, $locale);
$this->assertTrue($object->sessionStarted());
} catch (Exception $e) {
$this->fail('Fail to start session: ' . $object->getLastUrl());
}

echo "\$_SESSION in testStartProductSession(): ", print_r($_SESSION, 1);
return $object;
}

/**
* Test fails because $_SESSION is empty again
* @depends testStartProductSession
*/
public function testSessionIdIsKept(MC_Session_Product $lastObject)
{
echo "\$_SESSION in testSessionIdIsKept(): ", print_r($_SESSION, 1);
$object = $this->getObject();
// fails
$this->assertTrue($lastObject->sessionStarted());
$this->assertTrue($object->sessionStarted());
$this->assertEquals($lastObject->getSessionId(), $object->getSessionId());
return $object;
}
}

/* ###### Output


$_SESSION in testStartProductSession():
Array
(
[__MC] => Array
(
[MC_Session_Product] => Array
(
[keyOne] => 'valueOne'
[sessionId] => 'someId'
)

)

)
$_SESSION in testSessionIdIsKept():
Array
(
)

*/

最佳答案

与其让 $_SESSION 成为单元测试的依赖项,不如对每个函数需要的 session 部分进行参数化。然后您可以轻松地模拟单元测试中的参数。以您当前尝试的方式执行此操作太困难,并且会使您的代码更难测试。这将需要更改您当前的代码,但它会改进您的代码并使事情更易于测试。

关于php - 无法进行单元测试 : $_SESSION empties before each test is ran,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7639627/

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