Я испытываю затруднения при насмешке объекта PDO с PHPUnit.
Кажется, нет большой информации о сети о моей проблеме, но от того, что я могу собрать:
Существует функция, предназначенная для предотвращения этого поведения путем добавления следующей строки к модульному тесту:
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.......
Какой-либо pro's PHPUnit дает мне руку?
Спасибо,
Ben
Лучшее, что я могу придумать, - это использовать runkit и переопределить два последних метода как защищенные с помощью runkit_function_redefine.
Не разрешайте включать параметр runkit.internal_override в php.ini.
И, как всегда, как и в случае с eval, если runkit кажется ответом, вопрос, вероятно, неверен:)