我正在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 层的依赖,并且该服务更容易在其他代码中重用。