我正在尝试测试此REST服务,以便在itemService.getActiveItems()
返回空List
时抛出NOT_FOUND(404)错误:
@GetMapping("/items/active")
public ResponseEntity<List<ItemEntity>> getActiveItems() {
List<ItemEntity> activeItems = itemService.getActiveItems();
if (activeItems.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} else {
return new ResponseEntity<>(activeItems, HttpStatus.OK);
}
}
我使用TestRestTemplate进行测试:
@Mock
private ItemService itemService;
@Test
public void activeItemsTest() {
private TestRestTemplate templateAuth;
when(itemService.getActiveItems()).thenReturn(new ArrayList());
ResponseEntity<List<ItemEntity>> result = templateAuth.exchange("/items/active", HttpMethod.GET,
null, new ParameterizedTypeReference<List<ItemEntity>>() {
});
Assertions.assertThat(result.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
我正在尝试使"/items/active"
端点返回new ResponseEntity<>(HttpStatus.NOT_FOUND);
,因为我嘲笑itemService.getActiveItems()
返回了一个空的ArrayList
。测试result.getStatusCode()
不包含404时,如何修改测试以返回404错误代码?
答案 0 :(得分:1)
您可以使用JUnit 5并用@ExtendWith(MockitoExtension.class)
注释类。
和@SpringBootTest
。然后更改
@Mock
private ItemService itemService;
到
@SpyBean
private ItemService itemService;
以便您可以模拟自动连接到Controller的服务的行为