Ich habe Schwierigkeiten, das PDO-Objekt mit PHPUnit verspotten.Mocking das PDO-Objekt mit PHPUnit
Es scheint nicht zu viele Informationen im Internet über mein Problem zu sein, aber von dem, was ich sammeln kann:
- PDO hat ‚final‘ __wakeup und __sleep Methoden, die es vor dem serialisiert verhindern.
- PHPunit's Mock-Objekt-Implementierung serialisiert das Objekt irgendwann.
- Die Komponententests schlagen dann mit einem PHP-Fehler fehl, der von PDO generiert wird, wenn dies auftritt.
Es gibt ein Merkmal dieses Verhalten gemeint ist, zu verhindern, indem Sie die folgende Zeile in der Unit-Test:
class MyTest extends PHPUnit_Framework_TestCase
{
protected $backupGlobals = FALSE;
// ...
}
Quelle: noch http://sebastian-bergmann.de/archives/797-Global-Variables-and-PHPUnit.html
Dies ist nicht für mich arbeiten, mein Test produziert ein Fehler.
Vollständiger Testcode:
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.......
Alle PHPUnit Pro geben Sie mir eine Hand?
Danke,
Ben
Das macht den Job. Vielen Dank! – uckelman
Du bist der Papa! Vielen Dank, das funktioniert gut. Ich hatte es aufgegeben, dieses Problem zu lösen! –
Ich hatte das gleiche Problem wie das Original-Poster und nutzte Ihre Lösung. Aber jetzt sieht meine Typhinterlegung es nicht mehr als PDO. 'muss eine Instanz von PDO sein, Instanz von Mock_PDOMock_96936f72 gegeben ' – nvanesch