Mockito 在测试控制器时返回不正确的响应
Mockito is returning the incorrect response when testing a controller
我有一个 misterius。
我正在尝试为此控制器方法编写测试:
@GetMapping("/{id}")
public ResponseEntity<Object> getIncidencia(@PathVariable(value = "id") Long id){
Optional<IncidenciaModel> incidenciaModelOptional = incidenciaService.findById(id);
if(!incidenciaModelOptional.isPresent()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Incidencia not found");
}
return ResponseEntity.status(HttpStatus.OK).body(incidenciaModelOptional.get());
}
我这样做了:
@SpringBootTest
public class IncidenciaControllerTest {
@InjectMocks
private IncidenciaController controller;
@Mock
private IncidenciaService service;
private Optional<IncidenciaModel> incidenciaOptional;
private static final Long ID = 1L;
private static final Integer REGIAO_ID = 1;
private static final Integer MES = 5;
private static final Long FAIXA_ID = 2L;
private static final Integer QNT_EXAME = 4;
@BeforeEach
void setUp() {
startIncidencia();
MockitoAnnotations.openMocks(this);
}
private void startIncidencia() {
incidenciaOptional = Optional.of(new IncidenciaModel(ID, REGIAO_ID, MES, FAIXA_ID, QNT_EXAME));
}
@Test
void whenFindByIDThenReturnSuccess() {
Mockito.when(service.findById(Mockito.anyLong())).thenReturn(incidenciaOptional);
ResponseEntity<Object> response = controller.getIncidencia(ID);
//Assegure pra mim que o retorno não seja nulo.
Assertions.assertNotNull(response);
//Assegure pra mim que o corpo da resposta não pode ser null (porque tem que vir um userDTO).
Assertions.assertNotNull(response.getBody());
//Assegure pra mim que a resposta do endpoint vai ter a classe do tipo ResponseEntity
Assertions.assertEquals(ResponseEntity.class, response.getClass());
//Assegure pra mim que eu ao encontrar o registro a resposta terá um Status Code 200 - OK.
Assertions.assertEquals(HttpStatus.OK, response.getStatusCode());
}
}
我不知道为什么,但是方法 ResponseEntity<Object> response = controller.getIncidencia(ID);
正在返回 <404 NOT_Found 未找到,未找到事件 []> 但正确的结果是 200 OK。
我做错了什么?
我发现了,但我知道为什么。
我re-wrote所有代码,当我取下控制器的@CrossOrigin标签时,我的测试运行返回200 OK。有人知道为什么会这样吗?
@RestController
//@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping("/users")
public class UserController {
我有一个 misterius。
我正在尝试为此控制器方法编写测试:
@GetMapping("/{id}")
public ResponseEntity<Object> getIncidencia(@PathVariable(value = "id") Long id){
Optional<IncidenciaModel> incidenciaModelOptional = incidenciaService.findById(id);
if(!incidenciaModelOptional.isPresent()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body("Incidencia not found");
}
return ResponseEntity.status(HttpStatus.OK).body(incidenciaModelOptional.get());
}
我这样做了:
@SpringBootTest
public class IncidenciaControllerTest {
@InjectMocks
private IncidenciaController controller;
@Mock
private IncidenciaService service;
private Optional<IncidenciaModel> incidenciaOptional;
private static final Long ID = 1L;
private static final Integer REGIAO_ID = 1;
private static final Integer MES = 5;
private static final Long FAIXA_ID = 2L;
private static final Integer QNT_EXAME = 4;
@BeforeEach
void setUp() {
startIncidencia();
MockitoAnnotations.openMocks(this);
}
private void startIncidencia() {
incidenciaOptional = Optional.of(new IncidenciaModel(ID, REGIAO_ID, MES, FAIXA_ID, QNT_EXAME));
}
@Test
void whenFindByIDThenReturnSuccess() {
Mockito.when(service.findById(Mockito.anyLong())).thenReturn(incidenciaOptional);
ResponseEntity<Object> response = controller.getIncidencia(ID);
//Assegure pra mim que o retorno não seja nulo.
Assertions.assertNotNull(response);
//Assegure pra mim que o corpo da resposta não pode ser null (porque tem que vir um userDTO).
Assertions.assertNotNull(response.getBody());
//Assegure pra mim que a resposta do endpoint vai ter a classe do tipo ResponseEntity
Assertions.assertEquals(ResponseEntity.class, response.getClass());
//Assegure pra mim que eu ao encontrar o registro a resposta terá um Status Code 200 - OK.
Assertions.assertEquals(HttpStatus.OK, response.getStatusCode());
}
}
我不知道为什么,但是方法 ResponseEntity<Object> response = controller.getIncidencia(ID);
正在返回 <404 NOT_Found 未找到,未找到事件 []> 但正确的结果是 200 OK。
我做错了什么?
我发现了,但我知道为什么。
我re-wrote所有代码,当我取下控制器的@CrossOrigin标签时,我的测试运行返回200 OK。有人知道为什么会这样吗?
@RestController
//@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping("/users")
public class UserController {