Как правильно написать интеграционный тест Spring Boot для REST API

У меня есть 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);
    }

}

person Nital    schedule 29.11.2017    source источник
comment
stackoverflow.com/questions/25901985/ отлично отвечает на мой вопрос   -  person Nital    schedule 29.11.2017
comment
вы нашли ответ на вопрос? Есть тысячи статей, каждая показывает просто привет, мир пример, как будто есть только один API. Что происходит, я пытаюсь протестировать несколько API, но ничего об этом.   -  person Imran    schedule 10.05.2018
comment
@Imran - ответ находится в приведенной выше ссылке комментария, которую я упомянул.   -  person Nital    schedule 11.05.2018