Domanda

io sono sempre l'eccezione

PDOException: You cannot serialize or unserialize PDO instances

quando sto provando ad usare PHPUnit per i test unitari. Non ho molto in corso. Sto usando Zend Framework 1.11. Credo che forse che ho bootstrap mia domanda memorizzare il gestore di entità in Zend_Registry?

// application/Bootstrap.php -> _initDoctrine()
$em = EntityManager::create($doctrineOptions['connectionOptions'], $config);
Zend_Registry::set("em", $em);

Per il mio test di unità, sembra che

class Application_Models_UserTest extends Zend_Test_PHPUnit_ControllerTestCase
  public function testUnitTest() {
    $this->assertTrue(true);
  }
}

I miei sguardi phpunit.xml come http://pastebin.com/BCv2Ci8R , penso che la principale area di preoccupazione è la linea 1, Così sembra bootstrap.php come http://pastebin.com/hVZhJAG1

Aggiorna

Ho trovato che il problema inizia quando ho la riga

$schemaTool->dropSchema($classes);
$schemaTool->updateSchema($classes);

http://pastebin.com/hVZhJAG1

È stato utile?

Soluzione 3

Il suo stato qualche volta, ma penso di aver risolto il problema rimuovendo l'utilizzo di Zend_Registry da bootstrap.php

http://pastebin.com/BS79xviM

Altri suggerimenti

PHPUnit backup globali. Se DOP è da qualche parte nel $ GLOBALS o all'interno di un oggetto che si trova in $ GLOBALS si ottiene questo problema.

Ho trovato questo problema prima, dopo la ricerca sul web ho avuto una soluzione da http: //www.phpunit .de / biglietti / 376 . Basta impostare backupGlobals false a protected $backupGlobals = TRUE; in PHPUnit / Frameword / TestCase.php.

Ma la squadra PHPUnit sviluppatore non sosteniamo che: la maggior parte degli utenti di PHPUnit si aspetta che il lavoro come avviene quando il backup di $ GLOBALS funzione è abilitata. Questo è il motivo per cui è abilitato di default.

Se i test da sforzo codice che mette gli oggetti in unserializable $ GLOBALS è possibile disattivare la funzione. Dal punto di vista software di progettazione, non si dovrebbe avere un'istanza globale della DOP per cominciare.

Così, ho ottenuto la soluzione perfetta con questo:

$db = SmartPHP_Db::factory($dbConfig);
SmartPHP_Pool::set("db" , $db);
SmartPHP_Db_Table::setDefaultAdapter($db);

dopo il codice di test di unità:

unset($db);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top