gpt4 book ai didi

java - 如何测试 jersey2 请求过滤器?

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:23 25 4
gpt4 key购买 nike

在我的 jersey-2 应用程序中,我使用了一个非常简单的 ContainerRequestFilter,它将检查基本身份验证(可能是重新发明轮子,但请耐心等待)。过滤器有点像这样

@Override
public void filter(ContainerRequestContext context) throws IOException {
String authHeader = context.getHeaderString(HttpHeaders.AUTHORIZATION);
if (StringUtils.isBlank(authHeader)) {
log.info("Auth header is missing.");
context.abortWith(Response.status(Response.Status.UNAUTHORIZED)
.type(MediaType.APPLICATION_JSON)
.entity(ErrorResponse.authenticationRequired())
.build());
}
}

现在我想为它编写一个测试,模拟 ContainerRequestContext 对象。

@Test
public void emptyHeader() throws Exception {

when(context.getHeaderString(HttpHeaders.AUTHORIZATION)).thenReturn(null);

filter.filter(context);

Response r = Response.status(Response.Status.UNAUTHORIZED)
.type(MediaType.APPLICATION_JSON)
.entity(ErrorResponse.authenticationRequired())
.build();

verify(context).abortWith(eq(r));

}

此测试在 eq(r) 调用中失败,即使查看 Response 对象的字符串表示它们是相同的。知道出了什么问题吗?

最佳答案

因为我有同样的问题,所以我这样做了:

@Test
public void abort() {

new MyFilter().filter(requestContext);

ArgumentCaptor<Response> responseCaptor = ArgumentCaptor.forClass(Response.class);
verify(requestContext).abortWith(responseCaptor.capture());

Response response = responseCaptor.getValue();
assertNotNull(response);
JerseyResponseAssert.assertThat(response)
.hasStatusCode(Response.Status.FORBIDDEN);
}

关于java - 如何测试 jersey2 请求过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com