![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Zaczynam przygodę z testami i mam kilka wątpliwości czy wszystko robię prawidłowo.
1) Pierwszy problem to pobranie jakiegoś artykułu po jego identyfikatorze. Nie wiem pod jakimi ID znajdują się artykuły dlatego wymyśliłem sobie tak, że moje API wylosuje artykuł jeśli jako ID wpiszemy wartość "-1". Czy taki myk jest dopuszczalny? W innym przypadku wydaje mi się, że musiałbym stworzyć obiekt modelu i wywołać metodę pobierz losowy artykuł. Czy też inne rozwiązanie to utworzenie obiektu modelu i wywołanie metody pobierz artykuły z limitem 1, a potem uruchomienie API z wyciągniętym ID. (tak wiem, że tutaj powinno się to GET załatwić ![]()
2) Czy w testach tworzy się warunki - jeśli pierwszy assert się nie wykona to nie wykonuj następnych bo na pewno nie będą działać? Oto przykład:
Jeśli wystąpi 500 bo np. aplikacja się wysypie i wszystkie pozostałe assert będą negatywne. Ewentualnie podpytanie co w przypadku gdy zwróci 500 i brak danych do obróbki spowoduje wysypanie się aplikacji, fatal error czy też wyjątek. Czy należy testy przed tym zabezpieczać? 3) Czy mogę w jednej metodzie dwa razy uruchomić moje api dla różnych wartości? Np. w jednym chce przetestować zwrócenie wyniku prawidłowego, w drugim, że artykułu nie ma.
-------------------- Zapraszam na mój php blog, tworzenie stron.
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zainteresuj się może Codeception, ihmo wygodniejszy FW do testowania
Co dopytań: 1. Żeby testować to wrzuć sobie obiekt do bazy (za pomocą api) a potem go pobieraj. 2. W phpUnit jest coś takiego że konkretne metody mogą mieć przekazane wyniki z poprzedniej i na tym wykonać. Jeżeli jest 500 to raczej wina samego serwera i chyba się tego nie testuje. 3. Tak, aczkolwiek rozbiłbym to na 2 metody: jedna np. test_positive_response i test_negative_response Ten post edytował Pyton_000 11.02.2015, 17:58:59 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Musisz zmienić trochę nastawienie do testów jednostkowych, część z tego co proponujesz to testy integracyjne. Testy jednostkowe testują najmniejsze możliwe jednostki aplikacji - pojedyncze funkcje, metody.
1. Pobranie artykułu po ID. Rozumiem, że chcesz tu testować metodę API pobierającą artykuł, tak? Nie testujesz tutaj bazy danych tylko API, zatem robisz mock'a na połączenie do bazy danych i zwracasz w nim testowe dane, następnie sprawdzasz, czy to co zwraca API jest zgodne z tymi testowymi danymi. Dzięki temu nie obsługujesz w ogóle bazy danych i testy mogą zostać uruchomione bezpośrednio z kodu bez konfiguracji całego środowiska. 2. Generalnie nie. W testach decydujesz co badasz aktualnym testem. Testowanie samego /apiArticle/get-article możesz przeprowadzić na kilkanaście sposobów pod różnym kątem. Np. sprawdzasz co zwraca API w przypadku
Za każdym razem wiesz co testujesz, np wysyłając jako ID ciąg tekstowy oczekujesz, że serwer zwróci błąd o kodzie 500 - asercję ustawiasz więc na sprawdzenie, czy wystąpił błąd i ma kod 500. Jeśli wystąpi Ci jakiś fatal error z samego PHP to nie obsługujesz go w testach, bo takowy w działającej aplikacji nie ma prawa się pojawić, wszystko musi zostać obsłużone. 3. Tak, jeśli każde uruchomienia są od siebie niezależne, tzn gdy jedno nie wpływa na wyniki drugiego. Generalnie uruchomienie testów kilkukrotnie powinno za każdym razem zwracać te same wyniki. Do czegoś takiego w PHPUnit jest specjalne rozwiązanie Data providers -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 06:10 |