Spring 为 putMapping 启动 Junit 测试 returns 始终为 null
Spring boot Junit testing for putMapping returns always null
我有一个 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);
}
如何解决这个问题?
我通过准确调用原始代码中的 Controller
来解决这个问题。首先,我通过我的测试代码调用了 Optional --> getRewardIdFromDatabase()
代码,我执行了 update
方法控制器
我有一个 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);
}
如何解决这个问题?
我通过准确调用原始代码中的 Controller
来解决这个问题。首先,我通过我的测试代码调用了 Optional --> getRewardIdFromDatabase()
代码,我执行了 update
方法控制器