![](/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.