RestAssuredMvc 无法解析 Pageable
RestAssuredMvc cannot resolve Pageable
我在我的测试中使用了 RestAssured,我也在其中模拟了服务层。为此,我不得不将测试设置从 webAppContextSetup
更改为 standAloneSetup
。这样,我就可以创建我的控制器的一个实例,并将 @InjectMock
模拟服务放入其中。
代码:
@BeforeEach
public void setup() {
RestAssuredMockMvc.standaloneSetup(controller); -> Brakes test
RestAssuredMockMvc.webAppContextSetup(webApplicationContext); -> Works fine
}
测试如下:
Mockito.when(findService.findUnreadNotificationItems(Mockito.any(), Mockito.any(), Mockito.any()))
.thenReturn(new PageImpl<>(List.of(generateDummyNotificationItemWithId())) {
});
final String response = given()
.queryParam("page", "0")
.queryParam("size", "10")
.contentType(ContentType.JSON)
.log().all()
.when()
.get("/notification/{groupName}/{userName}", "subacquiring_viewers", "John.Doe")
.then()
.log().all()
.assertThat()
.statusCode(HttpStatus.OK.value())
.extract().asString();
端点:
public Page<NotificationItemResponse> findUnreadNotifications(@PageableDefault(size = DEFAULT_PAGE_SIZE) final Pageable pageable,
@PathVariable final String groupName, @PathVariable final String userName)
当我使用 standAloneSetup
时出现错误:
No primary or single unique constructor found for interface org.springframework.data.domain.Pageable
我见过一个非常相似的问题,答案很好 here,但 RestAssuredMvc 没有任何解析器,或者至少我在网上搜索时没有找到任何内容。 任何人都可以使用 RestAssuredMvc 的独立设置帮助我解决分页问题吗?
我发现 standaloneSetup 有一个以 MockMvcBuilder 作为参数的重载。我可以使用以下方法完成 customArgumentResolver:
@BeforeEach
public void setup() {
RestAssuredMockMvc.standaloneSetup(MockMvcBuilders.standaloneSetup(controller).setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
.setControllerAdvice(new NotificationItemControllerAdvice()));
}
我在我的测试中使用了 RestAssured,我也在其中模拟了服务层。为此,我不得不将测试设置从 webAppContextSetup
更改为 standAloneSetup
。这样,我就可以创建我的控制器的一个实例,并将 @InjectMock
模拟服务放入其中。
代码:
@BeforeEach
public void setup() {
RestAssuredMockMvc.standaloneSetup(controller); -> Brakes test
RestAssuredMockMvc.webAppContextSetup(webApplicationContext); -> Works fine
}
测试如下:
Mockito.when(findService.findUnreadNotificationItems(Mockito.any(), Mockito.any(), Mockito.any()))
.thenReturn(new PageImpl<>(List.of(generateDummyNotificationItemWithId())) {
});
final String response = given()
.queryParam("page", "0")
.queryParam("size", "10")
.contentType(ContentType.JSON)
.log().all()
.when()
.get("/notification/{groupName}/{userName}", "subacquiring_viewers", "John.Doe")
.then()
.log().all()
.assertThat()
.statusCode(HttpStatus.OK.value())
.extract().asString();
端点:
public Page<NotificationItemResponse> findUnreadNotifications(@PageableDefault(size = DEFAULT_PAGE_SIZE) final Pageable pageable,
@PathVariable final String groupName, @PathVariable final String userName)
当我使用 standAloneSetup
时出现错误:
No primary or single unique constructor found for interface org.springframework.data.domain.Pageable
我见过一个非常相似的问题,答案很好 here,但 RestAssuredMvc 没有任何解析器,或者至少我在网上搜索时没有找到任何内容。 任何人都可以使用 RestAssuredMvc 的独立设置帮助我解决分页问题吗?
我发现 standaloneSetup 有一个以 MockMvcBuilder 作为参数的重载。我可以使用以下方法完成 customArgumentResolver:
@BeforeEach
public void setup() {
RestAssuredMockMvc.standaloneSetup(MockMvcBuilders.standaloneSetup(controller).setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
.setControllerAdvice(new NotificationItemControllerAdvice()));
}