![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 119 Pomógł: 0 Dołączył: 10.10.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
co powinno się testować, jakich narzędzi używać jeśli chodzi o Doctrine + baza danych + Symfony?
będę wdzięczny za każde wskazówki. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
W dalszym ciągu powinieneś używać PHPUnit niezależnie czy aplikacja jest napisana z użyciem Doctrine czy Symfony, to nadal PHP
Co do testowania bazy danych - nie robisz tego - takie dane mockujesz sobie w testach (poczytaj o doubles w phpunit) Ale do rzeczy: Aplikacja może być testowana na wiele sposobów (testy jednostkowe, integracyjne, funkcjonalne...), ale na tą chwilę możesz skupić się na samych testach jednostkowych (ich powinno być najwięcej) ![]() Co do połączenia z bazą danych, to tak jak napisałem wyżej - powinno być zamockowane czyli tworzysz coś co zawsze zwraca te same dane (to tyczy się testów jednostkowych) http://symfony.com/doc/current/book/testing.html http://symfony.com/doc/current/cookbook/te...g/doctrine.html |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 119 Pomógł: 0 Dołączył: 10.10.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
dzięki za odpowiedź, mniejsza o testy jednostkowe (je ogarniam), nie ogarniam testów integracyjnych czy funkcjonalnych, (nie odróżniam ich).
Czytam o Database Testing z 4 źródeł: 1. PHPUnit oficjalny manual 2. książka PHPUnit Essentials 3. Symfony Cookbook : 4. artykuł na blogu Symfony: Test your doctrine repository using a SQLite database I wszędzie inaczej... 1. PHPUnit oficjalny manual: - tworzę dataset.xml z danymi do wypełnienia testowej bazy danych (taki fixture) - instaluję DBUnit co daje mi klasę PHPUnit_Extensions_Database_TestCase (która pozwala czyścić db i importować dataset do db) . - klasa testująca rozszerza PHPUnit_Extensions_Database_TestCase i implementuje 2 metody getConnection(z danymi konfiguracyjnymi testową bazę danych) i metodę getDataSet (ładującą dataset.xml do bazy danych) - tworzę testową bazę danych - robię asserty gdzie porównuję dane ze wzorca z dataset.xml z danymi z wyniku zapytania do testowej bazy danych 2. książka PHPUnit Essentials (w podroździale o testowaniu bazy danych): - to jest nazwane testem integracyjnym - instaluję DBUnit - tworzę dataset.xml - klasa testująca rozszerza PHPUnit_Extensions_Database_TestCase - implementuję getConnection i getDataSet - assertem porównuję dane z zapytania (np $this->getConnection()->createQueryTable('customer', 'SELECT * FROM customer'); ) z danymi z dataset.xml (np $this->getDataSet()->getTable("customer"); ) - czyli dataset.xml jako wzór i jako wypełniacz testowej bazy danych 2. książka PHPUnit Essentials (w podroździale o testowaniu bazy danych z Doctrine): - to jest nazwane testem integracyjnym - instaluję berberlei/DoctrineExtension co daj mi klasę OrmTestCase - w klasie testującej rozszerzam OrmTestCase - w klasie testującej konfiguruję ustawienia bazy danych testowej - w klasie testującej dropuję bazę przed testami i tworzę świeże schema - w klasie testującej getDataSet(), dataset.xml do bazy - assertuję wynik metody pobierającej dane z bazy z wartością podaną na sztywno (np $this->assertEquals(20, $invoice->getPriceTotal()); 3. w Symfony Cookbook : - klasa testowa rozszerza Symfony\Bundle\FrameworkBundle\Test\KernelTestCase która "boot the kernel to get a valid connection" - to jest nazwane testem funkcjonalnym - tu testuję czy metoda repozytorium zwraca co trzeba moje wątpliwości: - nie ma tu słowa o testowym środowisku, bazie danych, jak ją skonfigurować. Rozumiem że rozszerzając KernelTestCase jakoś przełączam się na środowisko testowe. Czy może jakimś cudem nie potrzebuję testowej bazy danych? 4. w artykule na blogu Symfony: Test your doctrine repository using a SQLite database (z 2013 r): - to jest nazwane testem funkcjonalnym - konfiguruję środowisko testowe z SQLite w config_test.yml - tworzę bazę danych testową doctrine:schema:update - tworzę fixture z danymi do testów - tworzę klasę testującą która rozszerza WebTestCase z metodą ładującą fixture i metodą inicjującą repository w środowisku testowym - assertuję wynik metody pobierającej dane z bazy z wartością podaną na sztywno (np $this->assertEquals('EN', $countries[0]->getCountryCode()); moje wątpliwości: - wszędzie klasa testująca rozszerza inną klasę (PHPUnit_Extensions_Database_TestCase, OrmTestCase, WebTestCase) workflow jaki z tego wszystkiego wynoszę mając Symfony+Doctrine+PHPUnit: - tworzę testową bazę danych (doctrine:schema:update) - config_test.yml konfiguruję bazę testową - klasa testująca rozszerze KernelTestCase i czarodziejsko łączy się z testową bazą danych - tworzę jakieś przykładowe fixture i wrzucam do testowej db - w klasie testującej assertuję jakieś repository porównując z fixture. proszę o jakiś komentarz Ten post edytował koszykarze 13.06.2016, 17:48:04 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 00:27 |