RestTemplate, проблемы с postForObject
Я хочу написать тест для веб-приложения, где создаю нового юзера и добавляю его с помощью postForObject, но id передается не тот, который нужно, причём с каждым следующим запуском этого теста он увеличивается. Таким образом я не могу добавить юзера с заданным id, так как он меняется.
RestTemplate restTemplate = new RestTemplate();
UserDTO ivan = new UserDTO(5, "ivan", "ivanov");
UserDTO result = restTemplate.postForObject(BASE_USERS, ivan, UserDTO.class);
assertThat(result, notNullValue());
assertEquals(ivan.getId(), result.getId());
restTemplate.delete(BASE_USERS + "/" + result.getId());
Может кто-то может объяснить, почему так происходит, с чем это связано, и сделать так, чтобы я могла добавить юзера с id, который мне нужен?
Ответы (1 шт):
Эта проблема никак не связана с RestTemplate.
Очевидно, что при создании пользователя с помощью метода API, который находится по URL BASE_USERS, поле id, которое передается в запросе, игнорируется, и происходит автоматическая генерация этого поля (каждый новый пользователь автоматически получает id на единичку больше чем предыдущий).
Если ваша задача — протестировать готовый метод, который уже реализован, в соответствии с требованиями, а именно, что происходит автоматическая генерация идентификатора, то нужно адаптировать тест так, чтобы он проверял это требование.
Не нужно передавать id и с ним сравнивать. Нужно проверить, что:
- идентификатор действительно генерируется (т.е. он непустой)
- сгенерированный идентификатор можно использовать для доступа к пользователю по
id(если есть такой метод в API) - что генерируется уникальный идентификатор, т.е. при двух вызовах метода генерируются отличающиеся идентификаторы
- что в других полях пользователя значение те, которые были переданы при создании
Этого должно быть достаточно для тестирования данного функционала (в данном случае end to end, к сожалению, не знаю хорошего русского термина).
Если же требование звучит так, что этот метод должен использовать id из запроса, то нужно исправлять его реализацию.

