2012-09-16 24 views
8

Buduję zestaw interfejsów RESTful API i teraz muszę dla nich pisać testy jednostkowe. Nie jestem pewien, co testy jednostkowe powinny faktycznie przetestować.Testowanie interfejsów API usług REST za pomocą PHPUnit

Czy testy jednostkowe powinny sprawdzić, czy odpowiedź otrzymana z serwera jest poprawna dla różnych wejść? Jeśli tak, czy dobrze jest mieć wcześniej zdefiniowany zestaw poprawnych formatów odpowiedzi i sprawdzić odpowiedzi na nie?

UPDATE

Wołam tych usług poprzez CURL i mogę zdecydowanie sprawdzić kod stanu. Odpowiedź może być różna dla różnych danych wejściowych, więc czy powinienem sprawdzić wszystkie możliwe odpowiedzi?

W jaki sposób testowanie jednostek jest zwykle wykonywane dla API RESTful przy użyciu ogólnie PHPUnit?

Odpowiedz

4

Jeśli warstwa danych API jest wystarczająco wyodrębniona, aby można było otrzymywać spójne i przewidywalne dane wyjściowe dla danego wejścia, to przypadki testowe powinny zdecydowanie zawierać pewne wspólne oczekiwania wyjściowe dla pewnej skończonej listy wejść. Powinny one również testować pod kątem dowolnego błędu przypadki, które możesz podkręcić.

Jeśli twój interfejs API nie działa w warstwie danych, która jest w stanie przewidywalnym (na przykład, jeśli jest ona połączona z danymi na żywo lub danymi współdzielonymi przez programistów), w efekcie wyda dużo pieniędzy czasu na poprawianie testów w celu prawidłowego modelowania nowego stanu danych. To sprawia, że ​​testowanie jednostkowe jest mniej wartościowe, ponieważ możesz nie uruchamiać ich tak często, a ponieważ nigdy nie wiesz, czy błąd testu wynika z zmiany danych lub zmiany logiki programu. To, czy przeważa ryzyko braku testów jednostkowych, zależy od indywidualnej sytuacji (jak często testy się psują, jak ważna jest usługa, & ct).

Jeśli chodzi o to, jak używać PHPUnit do uruchamiania przypadków testowych, nie mogę odpowiedzieć na to konkretnie, ale wyobrażam sobie, że robiłbyś tak, jak zauważyłeś @basiljames; wykonaj połączenie z danym punktem końcowym i sprawdź, czy otrzymana odpowiedź poprawnie odpowiada Twoim oczekiwaniom. Nie różni się to od żadnego innego testu jednostkowego, poza tym, że mogą działać nieco wolniej.

2

Możesz użyć JUnit do swoich przypadków testowych. Będziesz musiał sprawdzić na HTTP Status Code, a następnie zawartość na odpowiedzi na konkretny atrybut lub wartość.

Powiązane problemy