У меня есть REST API
, разработанный с использованием Spring Boot
и H2 DB
, который отлично работает без каких-либо проблем.
http://localhost:8080/api/employees
возвращается
[
{
"id":1,
"name":"Jack"
},
{
"id":2,
"name":"Jill"
}
]
Теперь проблема в том, что у меня есть два разных интеграционных теста для тестирования этого REST API. Оба они работают нормально, но я не уверен, какой из них я должен отказаться. Я понимаю, что оба они более или менее достигают одного и того же результата. Первый использует MockMvc
, а другой использует TestRestTemplate
.
Есть ли какая-либо передовая практика, которой я должен следовать и отдавать предпочтение одному другому?
EmployeeRestControllerIT.java
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestingSampleApplication.class)
@AutoConfigureMockMvc
public class EmployeeRestControllerIT {
@Autowired
private MockMvc mvc;
@Test
public void givenEmployees_whenGetEmployees_thenStatus200() throws Exception {
mvc.perform(get("/api/employees")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$[0].name", is("Jack")));
}
}
EmployeeRestControllerIT2.java
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = TestingSampleApplication.class)
public class EmployeeRestControllerIT2 {
@LocalServerPort
private int port;
private final TestRestTemplate restTemplate = new TestRestTemplate();
private final HttpHeaders headers = new HttpHeaders();
private final String expected = "[{\"id\":1,\"name\":\"Jack\"},{\"id\":2,\"name\":\"Jill\"}]";
@Test
public void testRetrieveStudentCourse() throws JSONException {
String url = "http://localhost:" + port + "/api/employees";
HttpEntity<String> entity = new HttpEntity<>(null, headers);
ResponseEntity<String> response = restTemplate.exchange(url, GET, entity, String.class);
JSONAssert.assertEquals(expected, response.getBody(), false);
}
}