Как написать тест для этого метода put

#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 в объекте, для которого вы вызываете метод. Возможно, вы захотите использовать насмешки вместо реальных классов, но это полностью зависит от того, что вы хотите проверить.