2011-07-08 15 views
28

Próbuję rozpocząć pracę z Symfony2 i próbuję skonfigurować automatyczne testowanie warstwy modelu mojej aplikacji. Książka Symfony2 mówi o testowaniu jednostkowym dla kontrolerów, ale nie mogę znaleźć wielu przykładów testowania modelu.Jak skonfigurować urządzenia Doctrine2 podczas testowania za pomocą PHPUnit?

chciałbym mieć czysty zbiór danych do pracy z przebiegów testowych przed siebie i znaleźć te artykuły:

Na podstawie artykułu I sznapka.pl test faktycznie działa bez błędów, ale chociaż tworzony jest schemat testu, urządzenia nie ładują się. Nie rozumiem, dlaczego, a nawet sposobu debugowania tego.

Tło: Wcześniej pracowałem z CakePHP, gdzie ładowanie urządzeń jest w dużej mierze obsługiwane automatycznie, może mam złe podejście do Symfony/Doctrine?

+0

(Poczucie winy z powodu rezygnacji z tego pytania.) Musiałem odejść od poszukiwań Symfony do innych projektów, ale mam nadzieję, że wkrótce wrócimy. W tej chwili uważam, że lżejsze podejście w Symfony jest bardziej odpowiednie, jak sugerują jules poniżej. Na przykład nie musimy testować warstwy trwałości i zawsze powinniśmy próbować testować wokół krawędzi wykresu obiektu. – contrebis

Odpowiedz

6

Tak DoctrineFixtures są dobrym wyborem.

Aby przetestować model: tak naprawdę nie musisz ładować urządzeń w bazie danych, powinieneś tworzyć obiekty z żądanymi danymi (poprzez wstrzykiwanie ich za pomocą ustawiaczy).

Do kontrolera testu: Oprawy doctrine obciążenie i używać doctrine transactions więc stan bazy danych jest taka sama przed każdym testcase, rozpocząć transakcji w setUp() i wycofywania w tearDow(). (Jeśli kontroler również używa transakcji, to nie znalazłem jeszcze dobrego rozwiązania).

W przypadku błędu urządzenia, jeśli nie masz żadnego błędu, a twoje urządzenia nie są załadowane, być może pominąłeś konwencję nazewnictwa. Czy możesz pokazać nam jakiś kod?

4

Spójrz na this solution. Nie sądzę, że najlepszym rozwiązaniem jest korzystanie z transakcji, ponieważ są szanse, że użyjesz transakcji w swoim kodzie. To rozwiązanie sugeruje ręczne ładowanie urządzeń w każdym teście.

3

Jest bardzo przydatny LiipFunctionalTestBundle, który upraszcza pracę z urządzeniami w teście. Podstawową ideą jest utworzenie bazy danych przy każdym uruchomieniu testów, a następnie załadowanie urządzeń. Teraz możesz zapisywać modele, usuwać, każdy test będzie taki sam.

Powiązane problemy