Java 模拟服务以返回空列表以测试404状态代码
我正在尝试测试此REST服务,以便在Java 模拟服务以返回空列表以测试404状态代码,java,spring,rest,junit,mocking,Java,Spring,Rest,Junit,Mocking,我正在尝试测试此REST服务,以便在itemService.getActiveItems()返回空的列表时引发未找到(404)错误: @GetMapping("/items/active") public ResponseEntity<List<ItemEntity>> getActiveItems() { List<ItemEntity> activeItems = itemService.getActiveItems();
itemService.getActiveItems()
返回空的列表时引发未找到(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);
}
}
@GetMapping(“/items/active”)
公共响应性getActiveItems(){
List activeItems=itemService.getActiveItems();
if(activeItems.isEmpty()){
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}否则{
返回新的响应属性(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);
}
@Mock
私人项目服务项目服务;
@试验
public void activeItemsTest(){
私有TestRestTemplateTemplateAuth;
当(itemService.getActiveItems()).thenReturn(newArrayList());
ResponseEntity result=templateAuth.exchange(“/items/active”),HttpMethod.GET,
null,新的ParameteredTypeReference(){
});
Assertions.assertThat(result.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
我正试图使“/items/active”
端点返回新的ResponseEntity(HttpStatus.NOT\u FOUND)代码>如我模拟的itemService.getActiveItems()
返回一个空的ArrayList
。当我测试结果时,getStatusCode()不包含404。我应该如何修改测试以返回404错误代码?您可以使用JUnit 5并使用@ExtendWith(MockitoExtension.class)
和@SpringBootTest
。然后改变
@Mock
private ItemService itemService;
到
因此,您可以模拟自动连接到控制器中的服务的行为那么,当您测试此功能时,activeItems包含哪些内容?您需要修复您的activeItemsTest(){}
您有私有TestRestTemplate templateAuth代码>内部。如果您可以使用junit5,您可能想看看这个示例。您可以@autowire实际的服务类resttempalte..等:
@SpyBean
private ItemService itemService;