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()));
    }