Po napisaniu nowego API dobrą praktyką jest pokrycie go testami. Dodatkowo pokrycie testami API sprawi, że upewnimy się czy działa ono prawidłowo, w tym artkule pokażę Ci jak napisać testy, które sprawdzą poprawność działania API napisanego w Spring Boot.
Prosty przykład
Na potrzeby testu napiszmy metodę, która wyświetla napis hello:
@RestController public class Api { @GetMapping("/hello") public String get() { return "hello"; } }
Teraz przygotujmy test dla niej. Należy utworzyć nową klasę testu, która będzie posiadała trzy adnotacje:
- @RunWith(SpringRunner.class) – umożliwia na korzystanie z biblioteki JUnit
- @SpringBootTest – dostarcza kontekst testowy Spring
- @AutoConfigureMockMvc – pozwala na automatyczną konfiguracje MockMvc
@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class ApiTest { @Autowired private MockMvc mvc; @Test public void helloTest() throws Exception { mvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(content().string("hello")); } }
W powyższym teście, w liniach:
11 – wskazywana jest metoda i endpoint, który ma zostać odpytany;
12 – wskazanie oczekiwanego statusu;
13 – wskazanie oczekiwanej odpowiedzi.
Rezultat testu:
MockHttpServletRequest: HTTP Method = GET Request URI = /hello Parameters = {} Headers = [] Body = null Session Attrs = {} MockHttpServletResponse: Status = 200 Error message = null Headers = [Content-Type:"text/plain;charset=UTF-8", Content-Length:"6"] Content type = text/plain;charset=UTF-8 Body = hello Forwarded URL = null Redirected URL = null Cookies = [] Expected :hello Actual :hello Status :OK
Test metody z parametrami
Zdarza się, że metoda ma parametry wejściowe, np.:
@GetMapping("/hello") public String get(@RequestParam(required = false, defaultValue = "") String name) { return "hello " + name; }
Wówczas do testu wystarczy dodać informacje o wchodzącym parametrze co widać w linii 3.
@Test public void helloParamTest() throws Exception { mvc.perform(get("/hello").param("name", "Przemek")) .andExpect(status().isOk()) .andExpect(content().string("hello Przemek")); }
Co dalej?
W kolejnym artykule dowiesz się jak testować API, które zwraca obiekty.