![](/img/trans.png)
[英]MockHttpServletResponse returning empty body for Pageable endpoint
[英]MockHttpServletResponse is not returning mocked list
我正在尝试测试一个简单的 controller mocking 的服务结果。 为此,我正在使用 Mockito 的when().thenReturn()
方法返回一个新数组。 它确实适用于断言 OK 状态和返回数组大小,问题是该数组中的对象是空的,所以我不能断言它们具有某些值。
具体来说, MockHttpServletResponse
响应正文是[{},{},{}]
和断言错误java.lang.AssertionError: No value at JSON path "$[0].id"
。
这是一个非常基本的案例,但我需要对服务返回的数组进行一些转换,所以我需要模拟它们的值以测试它们。
可以嘲笑他们吗? 我究竟做错了什么? 谢谢。
这是测试的代码:
@ExtendWith(SpringExtension.class)
@WebMvcTest(BookController.class)
public class BookControllerTest {
@Autowired
MockMvc mockMvc;
@MockBean
private BookService bookService;
@Test
void getAllBooks() throws Exception {
List<Book> books = new ArrayList<>();
books.add(new Book(1L, "Book 1", "Author 1", "Description 1"));
books.add(new Book(2L, "Book 2", "Author 2", "Description 2"));
books.add(new Book(3L, "Book 3", "Author 3", "Description 3"));
when(bookService.getAllBooks()).thenReturn(books);
mockMvc.perform(MockMvcRequestBuilders.get(Urls.BOOK_URL)
.contentType(MediaType.APPLICATION_JSON))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(3)))
.andExpect(jsonPath("$[0].id").value(1L));
}
}
实际 controller:
@RestController
@RequestMapping(Urls.BOOK_URL)
public class BookController {
private final BookService bookService;
public BookController(BookService bookService) {
this.bookService = bookService;
}
@GetMapping
public List<Book> getAllBooks() {
return bookService.getAllBooks();
}
}
和基本实体:
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Book {
@Id
@GeneratedValue
private Long id;
private String title;
private String author;
private String description;
}
它实际上确实返回了您的列表,这通过大小 3 的断言没有失败是显而易见的。 问题是您的Book
class 没有 getter 和 setter,而创建 JSON 需要这些(或至少是 getter)。
当您使用 Lombok 时,将@Getters
和@Setters
添加到 class 以生成它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.