模拟服务以返回空列表以测试404状态代码

时间:2020-09-16 17:58:46

标签: java spring rest junit mocking

我正在尝试测试此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错误代码?

1 个答案:

答案 0 :(得分:1)

您可以使用JUnit 5并用@ExtendWith(MockitoExtension.class)注释类。 和@SpringBootTest。然后更改

 @Mock
 private ItemService itemService;

 @SpyBean
 private ItemService itemService;

以便您可以模拟自动连接到Controller的服务的行为

相关问题