我很难用PHPUnit嘲笑PDO对象。使用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的Pro的给我个忙吗?
感谢,
本
这是做这个工作。谢谢! – uckelman 2010-11-04 19:29:03
你是爸爸!非常感谢,这工作正常。我已经放弃了解决这个问题! – 2010-11-05 22:30:26
我遇到了与原始海报相同的问题并使用了您的解决方案。不过,现在我的打印不再将其视为PDO。 '必须是PDO的一个实例,Mock_PDOMock_96936f72的实例给出' – nvanesch 2014-04-11 09:34:39