2010-12-17 11 views
7

Jak mogę z PHP, ponownie utworzyć moją bazę danych, może wstawić domyślne dane. Obecnie zamierzam wykorzystać to zachowanie do testów jednostkowych.Jak mogę w PHP ponownie utworzyć moją bazę danych (na przykład do testowania jednostek)?

Używam Doctrine 2, Zend Framework 1.11, Zend_Test dla testów jednostkowych

mogę użyć CLI

doctrine orm:schema-tool:update --force 

Albo

doctrine orm:schema-tool:drop --force 
doctrine orm:schema-tool:create 

szukam zamiennika PHP do tej pory znaleziono this

ale będzie wyglądać som Nie muszę tak naprawdę określać klas modeli, szczególnie w fazie rozwoju, kiedy mogą się zmieniać. Powinien po prostu przeczytać ze wszystkich klas określonych w ... poniżej ... podobnie jak w CLI, nie musisz określać klas, które chcesz?

$driverImpl = $config->newDefaultAnnotationDriver(array(realpath('../models'))); 
$config->setMetadataDriverImpl($driverImpl); 
+1

* (odniesienie) * [Rozdział w PHPUnit na temat testowania bazy danych] (http://www.phpunit.de/manual/3.4/en/database.html) – Gordon

+0

@Gordon, dziękuję, myślę, że to będzie właściwa droga do jednostki przetestuj moje modele, jedyne co jest zamiast połączenia PDO, jak mogę użyć połączenia Doctrine? Używam [Doctrine 2] (http: //www.doctrine-project.org /) –

+0

Zasadniczo używam tego samego ustawienia co ty, ale wyciągam listę nazw klas z konfiguracji, która jest łatwiejsza do utrzymania. Jednak odkryłem, że wywoływanie 'dropSchema()' i 'createSchema()' przy każdym teście jest * naprawdę * drogie, a duży zestaw testów trwa wiecznie. Używanie urządzeń PHPUnit jest znacznie szybsze. Będę musiał również sprawdzić rozszerzenie Benjamina. –

Odpowiedz

5

Można użyć

PHPUnit Rozszerzenie dla Nauki oferuje kilka zaczepów do PHPUnits rozszerzenie bazy danych i oferuje bardzo wygodny sposób, aby przetestować swój kod Doctrine 2 przeciwko bazy danych.

W pliku Readme znajduje się kilka przykładów, w tym przykład ilustrujący tworzenie schematu bazy danych w locie. Benjamin Eberlei's jest głównym twórcą Doctrine 2.

zobaczyć również B. Eberlei Ultimate Guide to DB badań z PHPUnit

0

Doctrine obsługuje fixtures. Wypróbuj to.

+0

Używam Doctrine 2. Może powinienem był uczynić jaśniejszym –

+0

tutaj jest tutorial dla symfony: http://www.symfony-project.org/blog/2009/10/05/symfony-and-doctrine-2 Ty musisz ręcznie tworzyć własne modele i utrzymywać je. – erenon

1

Ponieważ masz ustawić ścieżkę do modeli podczas konfigurowania EntityManager można utworzyć schemat w kodzie bez konieczności redeclare tej ścieżki (i bez konieczności deklarowania każdej klasy). Aby to zrobić, musisz uzyskać odwołanie do skonfigurowanej instancji EntityManager i uzyskać odwołanie do ClassMetadataFactory, które możesz następnie nazwać ClassMetadataFactory # getAllMedata() od.

Oto przykład, gdzie mam statycznych klasy Bootstrap, że pozwala mi się odniesienie do EntityManager z dowolnego miejsca, a ja odtworzyć schemat na Ustawienia() rozmowy w testach jednostkowych:

class ModelTestCase extends PHPUnit_Framework_TestCase { 

    public function setUp() { 
     $em = Bootstrap::getEntityManager(); 
     $tool = new \Doctrine\ORM\Tools\SchemaTool($em); 

     $mdFactory = $em->getMetadataFactory(); 
     $tool->createSchema($mdFactory->getAllMetadata()); 
     parent::setUp(); 
    } 
} 
Powiązane problemy