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.
Zobacz listę szkoleń


