我正在尝试在Dropwizard应用程序中测试Jersey资源类。 我有一个这样的过滤器:
@Authenticate
@Provider
public class MyFilter implements ContainerRequestFilter {
@Inject
public MyFilter(SessionService sessionService) {
this.sessionService = sessionService;
}
@Override
public void filter(final ContainerRequestContext requestContext)
throws IOException {
final String token = getToken(); // Gets token from requestContext
Optional<Session> session = sessionService.getSession(token);
requestContext.setProperty("Session", session.get());
}
}
资源是这样的:
@Authenticate
public Role createRole(@Valid RoleRequest role,
@HeaderParam(AUTHORIZATION) String authorisation,
@Context ContainerRequestContext context) throws Exception {
Session session = (Session) context.getProperty("Session");
return roleService.createRole(role, session.getNamespace(), session.getUserId());
}
我的目的是在上下文中模拟会话,以便在资源类中可以使用值对会话进行存根。
我正在尝试测试使用此过滤器的资源。 ResourceTest是这样的:
public class ResourceTest {
@Test
public void testCreateRole() {
Client client = resources.client();
Response roleRequest = client
.target("/v1/role")
.request()
.header("Authorization", "Bearer Token123")
.post(Entity.json(getRoleRequest()));
Assert.assertEquals(roleRequest, getRoleRequest());
}
}
但是,当我运行测试时,它甚至没有进入过滤器。如何模拟过滤器的字段?我正在使用dropwizard v1.3.5