Выполнение теста Junit с JsonPath не работаетJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Выполнение теста Junit с JsonPath не работает

Сообщение Anonymous »


Я запускаю модульный тест метода addUser() контроллера rest, который успешно выполняется без пути JSON. Каждый раз, когда я пытаюсь использовать jsonPath для выполнения строгого утверждения данных для проверки содержимого документа JSON, я получаю сообщение об ошибке «Нет значения по пути JSON «$.first_name». Любая помощь в решении проблемы будет высоко оценена. Ниже приведен пример кода

@Entity @Table(name = "пользователи") Пользователь публичного класса расширяет IdBaseEntity{ @JsonProperty("первое_имя") @Column(name = "first_name", nullable = false, length = 45) @NotBlank(message = «Имя не может быть пустым») @Длина(мин = 2, макс = 45) частная строка firstName; @JsonProperty("фамилия") @NotBlank(message = «Фамилия не может быть пустой») @Длина(мин = 2, макс = 45) @Column(name="last_name", nullable = false, length = 45) частная строка LastName; @NotBlank(message = «Электронный адрес не может быть пустым») @Длина(мин = 2, макс = 45) @Column(nullable = false, unique = true, length = 45) личная строка электронной почты; @NotBlank(message = «Имя пароля не может быть пустым») @Длина(мин = 2, макс = 45) @Column(nullable = false, длина = 45) личный строковый пароль; @JsonProperty("номер_телефона") @Столбец (длина = 13) частная строка номер телефона; @ManyToMany(fetch = FetchType.EAGER) @JoinTable( name = "users_roles", joinColumns = @JoinColumn(name ="user_id"), inverseJoinColumns = @JoinColumn(name="role_id") ) частные роли Set = new HashSet(); публичная строка getFirstName() { вернуть имя; } public void setFirstName (String firstName) { это.ПервоеИмя = ПервоеИмя; } публичная строка getLastName() { вернуть фамилию; } public void setLastName (String LastName) { this.lastName = последнее имя; } публичная строка getEmail() { вернуть электронное письмо; } public void setEmail(String email) { this.email = электронная почта; } общественная строка getPassword() { вернуть пароль; } public void setPassword (строковый пароль) { this.password = пароль; } публичная строка getPhoneNumber() { вернуть номер телефона; } public void setPhoneNumber (String phoneNumber) { this.phoneNumber = номер телефона; } @Override публичная строка toString() { return "Пользователь [firstName=" + firstName + ", LastName=" + LastName + ", email=" + email + ", пароль=" + пароль + ", номер телефона=" + номер телефона + "]"; } } интерфейс сервиса

публичный интерфейс UserService { общедоступный пользователь addUser (пользователь-пользователь); } класс обслуживания

@Service публичный класс UserServiceImpl реализует UserService{ частный UserRepository userRepo; @Autowired общественный UserServiceImpl (UserRepository userRepo) { this.userRepo = userRepo; } @Override общедоступный пользователь addUser (пользователь пользователя) { вернуть userRepo.save(пользователь); } } класс restcontroller

@RestController @RequestMapping("/api/v1/users") общественный класс UserRestApiController { частный UserServiceImpl userService; общественный UserRestApiController (UserServiceImpl userService) { this.userService = userService; } @PostMapping общедоступный ResponseEntity addUser(@RequestBody @Valid Пользователь){ Пользователь newUser = userService.addUser(пользователь); URI uri = URI.create("/api/v1/users"); вернуть ResponseEntity.created(uri).body(newUser); } } тестовый класс

@WebMvcTest(UserRestApiController.class) общественный класс UserRestApiControllerTest { //конечная точка uri частная статическая конечная строка END_POINT_PATH = "/api/v1/users"; @MockBean частный UserServiceImpl userService; @Autowired MockMvcockMvc; @Autowired ObjectMapper objectMapper; @Тест public void testAddUserShouldReturn201Created() выдает исключение { Пользователь пользователя = новый пользователь(); user.setFirstName("Джеймс"); user.setLastName("Квартенг"); user.setEmail("james@gmail.com"); user.setPassword("23464433"); user.setPhoneNumber("04233455"); // подделывает класс UserServiceImpl Mockito.when(userService.addUser(пользователь)).thenReturn(пользователь); //конвертируем пользовательский объект в объект json String bodyContent = objectMapper.writeValueAsString(пользователь); //выполняем http-запрос ockMvc.perform(post(END_POINT_PATH).contentType("application/json").content(bodyContent)) .andExpect(статус().isCreated()) .andExpect(jsonPath("$.first_name", is("Джеймс"))) .andDo(печать()); } } ошибка после запуска теста. часть кода ошибки опущена
java.lang.AssertionError: нет значения в пути JSON "$.first_name" в org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:302) в org.springframework.test.util.JsonPathExpectationsHelper.assertExistsAndReturn(JsonPathExpectationsHelper.java:326) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210) Вызвано: java.lang.IllegalArgumentException: json не может быть нулевым или пустым. по адресу com.jayway.jsonpath.internal.Utils.notEmpty(Utils.java:401)
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»