如何模拟响应实体<?>方法



我正在Spring Boot中实现单元测试,但我无法让它们工作。

这是我在轮盘控制器类中的方法。

@PutMapping("/open_roulette/")
public ResponseEntity<?> enableRoluette(@RequestParam("id") Long id) {
return rouletteService.enableRouletteById(id);
}

这是我在轮盘服务类上的方法。

@Override
public ResponseEntity<?> enableRouletteById(Long roulette_id) {
Optional<Roulette> roulette = rouletteRepository.findById(roulette_id);
HashMap<String, Object> response = new HashMap<String, Object>();
if (roulette.isPresent()) {
Roulette request = roulette.get();
{
if (!request.isRouletteStatus())
request.setBets(null);
}
request.setRouletteStatus(true);
rouletteRepository.save(request);
response.put("message", "La ruleta ha sido activada con éxito");
response.put("roulette", request);
return new ResponseEntity<Map<String, Object>>(response, HttpStatus.CREATED);
} else {
response.put("message", "La apuesta no es correcta");
response.put("error", HttpStatus.BAD_REQUEST);
return new ResponseEntity<Map<String, Object>>(response, HttpStatus.BAD_REQUEST);
}
}

这是我的测试方法 轮盘控制器测试类,我正在尝试这样做,但我得到了"该方法然后返回不适用于参数等。

@Test
public void testEnableRoluette() {
HashMap<String, Object> response = new HashMap<String, Object>();
ResponseEntity<?> responseEntity = new ResponseEntity<Map<String, Object>>(response, HttpStatus.CREATED);
Mockito.when(rouletteService.enableRouletteById(14L)).thenReturn(responseEntity);
assertEquals(rouletteController.enableRoluette(14L), responseEntity);
}

谢谢。

它不喜欢ResponseEntity?参数。如果您给出真实的类型,它就可以工作,即。响应实体>。

错误消息暗示了这一点。它期待CAP#2但正在CAP#1

ControllerTest.java:26: error: no suitable method found for thenReturn(ResponseEntity<CAP#1>)
.thenReturn (responseEntity);
^
method OngoingStubbing.thenReturn(ResponseEntity<CAP#2>) is not applicable
(argument mismatch; ResponseEntity<CAP#1> cannot be converted to ResponseEntity<CAP#2>)
method OngoingStubbing.thenReturn(ResponseEntity<CAP#2>,ResponseEntity<CAP#2>...) is not applicable
(argument mismatch; ResponseEntity<CAP#1> cannot be converted to ResponseEntity<CAP#2>)
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends Object from capture of ?
CAP#2 extends Object from capture of ?

还可以通过将响应处理移动到控制器来改进代码。您的服务应该只返回Map<>。这消除了对 Web 层的依赖,并且该服务更容易在其他代码中重用。

相关内容

最新更新