gpt4 book ai didi

ContainerRequestFilter 上的 junit 测试 - 验证 WebApplicationException 的实体

转载 作者:行者123 更新时间:2023-12-01 04:34:20 25 4
gpt4 key购买 nike

我已经基于 jersey 的 ContainerRequestFilter 构建了一个小的身份验证过滤器。

当请求未经授权时,这会抛出一些 WebAplicationExceptions,我想对此进行测试。

我已经有了这个,用于检查在调用过滤器方法并且请求未经授权时是否引发了异常:

@Category(CommitTest.class)
public class BasicAuthenticationFilterTest {

@Rule
public ExpectedException thrown = ExpectedException.none();

@Test
public void someInvalidAuthTest() throws IOException {
//...setup auth filter, and mock objects
//Expect an WebApplicationException

thrown.expect(WebApplicationException.class);
authenticationFilter.filter(mockRequestContext);
}
}

我可以很好地完成这项工作,并且我的测试运行良好。但我希望能够验证异常的响应。

编辑

澄清一下,我通常会这样抛出异常:

ApiError error = new ApiError(1, "UNAUTHORIZED", "No or empty authorization header");
throw new WebApplicationException(
error.getMessage(),
Response.status(Response.Status.UNAUTHORIZED).entity(error).build());

我想验证异常中抛出的响应和实体。现在我知道这甚至不可能。但我必须问清楚。

或者我应该以完全不同的方式进行此测试,并实际设置一个使用我的 auth-filter 的内存类型“服务器”,并向它发出实际请求(然后验证响应?)

最佳答案

您可以更新您的规则以检查异常消息,但要获得响应实体,可能更容易尝试/捕获,如下所示:

@Category(CommitTest.class)
public class BasicAuthenticationFilterTest {

@Test
public void someInvalidAuthTest() throws IOException {
//...setup auth filter, and mock objects

try {
authenticationFilter.filter(mockRequestContext);
fail("expect a WebApplicationException");
}
catch (WebApplicationException e) {
Response r = e.getResponse();

// validate status code
assertEquals(Response.Status.UNAUTHORIZED, r.getStatusInfo());

// validate entity
ApiError error = r.readEntity(ApiError.class);
assertEquals("No or empty authorization header", error.getMessage());
}
}
}

关于ContainerRequestFilter 上的 junit 测试 - 验证 WebApplicationException 的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22804538/

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