У меня есть метод GET, мне нужно протестировать, используя шаблон отдыха:
@ApiOperation("Finds all existing Tag")
@ApiResponses({
@ApiResponse(code = 200, message = "When list of new tag has been found."),
@ApiResponse(code = 404, message = "When unable to find any tag"),
})
@RequestMapping(method = RequestMethod.GET)
@ResponseStatus(value = HttpStatus.OK)
public ResponseEntity<List<Tag>> findAllEvents() {
log.info("Find All Tags");
return ResponseEntity.ok(TagEventRepository.findAllEvents());
}
}
мой тест выглядит так:
@Test
public void findAllEvents() {
//GIVEN
ParameterizedTypeReference<List<Tag>> newTag = new ParameterizedTypeReference<List<Tag>>(){};
TagTestBuilder
.withFullList()
.withSaved()
.buildList();
//WHEN
ResponseEntity<List<Tag>> response = restTemplate.exchange(TagResourceConstants.PATH, HttpMethod.GET, null, newTag);
//THEN
assertEquals(HttpStatus.OK.value(),response.
getStatusCodeValue());
}
Моя проблема в том, что я не могу связать ссылку на параметризованный тип(чтобы продолжить с List в качестве возвращаемого объекта) к tagTestBuilder, который создает полный список тегов и расширяет абстрактный класс TestBuilder, который реализует такие методы, как .createFullList, save и builtList
В вышеприведенной версии тестпройдет - но это неверно, так как он не создает правильный список нужных мне объектов (не используя TestBuilder).
Я, конечно, могу связать список с testBuilder, но не могу разрешить метод обмена restTemplate, такой как:
List<Tag> newTag = (List<Tag>) TagTestBuilder
.withFullList()
.withSaved()
.buildList();
//WHEN
ResponseEntity<List<Tag>> response = restTemplate.exchange(TagResourceConstants.PATH, HttpMethod.GET, null, newTag);
//THEN
assertEquals(HttpStatus.OK.value(),response.
getStatusCodeValue());
}
Я получаю ошибку ниже, понимаю, что форма неправильная, но имеюпонятия не имею, как написать это правильно.
Error:(82, 71) java: no suitable method found for exchange(java.lang.String,org.springframework.http.HttpMethod,<nulltype>,java.util.List<Tag>)
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(java.lang.String,org.springframework.http.HttpMethod,org.springframework.http.HttpEntity<?>,java.lang.Class<T>,java.lang.Object...) is not applicable
(cannot infer type-variable(s) T
(argument mismatch; java.util.List<Tag> cannot be converted to java.lang.Class<T>))
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(java.lang.String,org.springframework.http.HttpMethod,org.springframework.http.HttpEntity<?>,java.lang.Class<T>,java.util.Map<java.lang.String,?>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(java.net.URI,org.springframework.http.HttpMethod,org.springframework.http.HttpEntity<?>,java.lang.Class<T>) is not applicable
(cannot infer type-variable(s) T
(argument mismatch; java.lang.String cannot be converted to java.net.URI))
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(java.lang.String,org.springframework.http.HttpMethod,org.springframework.http.HttpEntity<?>,org.springframework.core.ParameterizedTypeReference<T>,java.lang.Object...) is not applicable
(cannot infer type-variable(s) T
(argument mismatch; java.util.List<Tag> cannot be converted to org.springframework.core.ParameterizedTypeReference<T>))
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(java.lang.String,org.springframework.http.HttpMethod,org.springframework.http.HttpEntity<?>,org.springframework.core.ParameterizedTypeReference<T>,java.util.Map<java.lang.String,?>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(java.net.URI,org.springframework.http.HttpMethod,org.springframework.http.HttpEntity<?>,org.springframework.core.ParameterizedTypeReference<T>) is not applicable
(cannot infer type-variable(s) T
(argument mismatch; java.lang.String cannot be converted to java.net.URI))
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(org.springframework.http.RequestEntity<?>,java.lang.Class<T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.springframework.boot.test.web.client.TestRestTemplate.<T>exchange(org.springframework.http.RequestEntity<?>,org.springframework.core.ParameterizedTypeReference<T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
Также попытался написать этот тест, используя метод getEntity, и, наконец, это работает, но я должен отладить тест, чтобы убедиться:
@Test
public void findAllEvents() {
//GIVEN
List<Tag> newTag = (List<Tag>) TagTestBuilder
.withFullList()
.withSaved()
.buildList();
//WHEN
ResponseEntity<Tag[]> response = restTemplate.getForEntity(TagResourceConstants.PATH, Tag[].class, newTag);
//THEN
assertEquals(HttpStatus.OK.value(),response.
getStatusCodeValue());
Я отлаживаю обе версии этого теста (getEntity с [] и использую параметризованную ссылку на тип, и они обе, кажется, работают должным образом.