模拟ContainerRequestFilter中的字段

时间:2018-10-08 21:11:42

标签: authentication filter jersey dropwizard

我正在尝试在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

0 个答案:

没有答案