使用 PHPUnit 模拟 PDO 对象
2022-08-30 13:59:41
我很难用PHPUnit模拟PDO对象。
网络上似乎没有太多关于我的问题的信息,但从我能收集到的信息来看:
- PDO具有“最终”__wakeup和__sleep方法,可防止其被序列化。
- PHPunit 的模拟对象实现会在某个时候序列化该对象。
- 然后,单元测试将失败,并在发生这种情况时由 PDO 生成 PHP 错误。
有一个功能旨在通过向单元测试中添加以下行来防止此行为:
class MyTest extends PHPUnit_Framework_TestCase
{
protected $backupGlobals = FALSE;
// ...
}
资料来源:http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html
这对我不起作用,我的测试仍然产生错误。
完整的测试代码:
class MyTest extends PHPUnit_Framework_TestCase
{
/**
* @var MyTest
*/
private $MyTestr;
protected $backupGlobals = FALSE;
/**
* Prepares the environment before running a test.
*/
protected function setUp()
{
parent::setUp();
}
/**
* Cleans up the environment after running a test.
*/
protected function tearDown()
{
parent::tearDown();
}
public function __construct()
{
$this->backupGlobals = false;
parent::__construct();
}
/**
* Tests MyTest->__construct()
*/
public function test__construct()
{
$pdoMock = $this->getMock('PDO', array('prepare'), array(), '', false);
$classToTest = new MyTest($pdoMock);
// Assert stuff here!
}
// More test code.......
任何PHPUnit专业人士都帮我一把吗?
谢谢
本