#java #spring-boot #mockito #junit5 #rest
Вопрос:
У меня есть метод put, который принимает заголовок «Принять» со значением «application/json» и класс RequestBody и возвращает класс ResponseEntity. Может ли кто-нибудь сказать мне, как писать тесты для этого метода
Это мой api put
public ResponseEntity<String> registerUserUsingPUT(@Parameter(in = ParameterIn.DEFAULT, description = "", schema=@Schema()) @Valid @RequestBody UserInput body) {
String accept = request.getHeader("Accept");
if (accept != null amp;amp; accept.contains("application/json")) {
UserInfo user = userInfoService.getByEmail(body.getEmail());
if(user==null) {
user = new UserInfo();
String email = body.getEmail();
if(email.matches("^[a-z0-9._% -] @[a-z0-9.-] .[a-z]{2,4}$")) user.setEmail(email);
user.setFirstName(body.getFirstName());
user.setLastName(body.getLastName());
user.setPassword(body.getUserPassword());
user.setRole(roleService.findRoleByType("Customer"));
if(body.getPhoneNo().length()==10) user.setPhoneNumber(body.getPhoneNo());
else return new ResponseEntity<String>("Incorrect Phone number",HttpStatus.BAD_REQUEST);
user.setPoints(0);
user.setStatus("Active");
user.setWalletBalance(0);
AddressDetails address = new AddressDetails();
address.setAddress(body.getAddress());
String pincode = body.getPinCode();
if(pincode.matches("^[0-9]{1,6}$")) address.setPincode(pincode);
address.setUser(user);
userInfoService.register(user);
addressDetailsDao.save(address);
return new ResponseEntity<String>("Registered",HttpStatus.OK);
}
else {
return new ResponseEntity<String>("User Already Exists",HttpStatus.BAD_REQUEST);
}
}
return new ResponseEntity<String>(HttpStatus.NOT_IMPLEMENTED);
Комментарии:
1. Пожалуйста, уточните свой вопрос: В чем ваша проблема с тестом? Что ты уже пробовал. Насколько я могу судить, это всего лишь стандартный метод, поэтому применяются стандартные методы модульного тестирования.
2. @KathrinGeilmann, я обновил вопросы. Нужно ли мне предоставлять услуги и классы dao?
3. Да, в противном случае вы получите NPE, если вызовете для них методы. Или, точнее, вам нужно заполнить переменные экземпляра userInfoService и addressDetailsDao в объекте, для которого вы вызываете метод. Возможно, вы захотите использовать насмешки вместо реальных классов, но это полностью зависит от того, что вы хотите проверить.