Весеннее загрузочное тестирование Junit для putMapping всегда возвращает ноль - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть PutMapping, который сначала проверит Reward-Entity, а затем, если существует, продолжит обновление Entity

@PutMapping
public ResponseEntity<RewardResponse> updateValidReward(Principal updatedPrincipal,
                                                                @RequestBody RewardUpdateRequest rewardUpdateRequest) {

            Optional<RewardEntity> rewardEntityInDatabase =
                RewardService.getRewardById(rewardUpdateRequest.getRewardId());

        if (!rewardEntityInDatabase.isPresent()) {
                return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }

        RewardEntity updatedReward = updateReward(updatedPrincipal,
                rewardUpdateRequest, rewardEntityInDatabase.get());

        RewardResponse updatedRewardResponse = RewardResponse.builder()
                .reward(RewardMapper.fromRewardEntity(updatedReward))
                .build();

        return ResponseEntity.ok(updatedRewardResponse);
}

Для меня это сейчас непросто, когда я пытаюсь написать для этого Test-case в следующем формате

ResponseEntity<RewardResponse> rewardResponse =
                controller.updateValidReward(principal, rewardUpdateRequest);


        RewardApi rewardApiToValidate = rewardResponse.getBody().getReward();
        assertThat(rewardApiExpected.getRewardTitle()).isEqualTo(rewardApiToValidate.getRewardTitle());
        assertThat(rewardApiExpected.getRewardText()).isEqualTo(rewardApiToValidate.getRewardText());

Я всегда получаю NullPointerException, когда выполняется нижняя строка в тестовом коде

rewardResponse.getBody().getReward();

потому что всегда нижеприведенное условие в фактическом коде становится true и оно всегда возвращает HttpStatus.NOT_FOUND

if (!rewardEntityInDatabase.isPresent()) {
                    return new ResponseEntity<>(HttpStatus.NOT_FOUND);
            }

Как с этим справиться?

1 Ответ

0 голосов
/ 22 апреля 2019

Я решил эту проблему, вызвав именно то, что делает Controller в исходном коде. Во-первых, я вызвал Optional --> getRewardIdFromDatabase() код в моем тестовом коде, я выполнил update метод контроллера

...