Насмешка Объекта PDO, использующего PHPUnit

Я испытываю затруднения при насмешке объекта PDO с PHPUnit.

Кажется, нет большой информации о сети о моей проблеме, но от того, что я могу собрать:

  1. PDO имеет 'финал' __ пробуждение и __ методы сна, которые препятствуют тому, чтобы он был сериализирован.
  2. Реализация фиктивного объекта PHPUNIT сериализирует объект в какой-то момент.
  3. Модульные тесты затем перестали работать с ошибкой PHP, сгенерированной PDO, когда это происходит.

Существует функция, предназначенная для предотвращения этого поведения путем добавления следующей строки к модульному тесту:

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

33
задан Galen 24 June 2012 в 18:53
поделиться

1 ответ

Лучшее, что я могу придумать, - это использовать runkit и переопределить два последних метода как защищенные с помощью runkit_function_redefine.

Не разрешайте включать параметр runkit.internal_override в php.ini.

И, как всегда, как и в случае с eval, если runkit кажется ответом, вопрос, вероятно, неверен:)

2
ответ дан 27 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: