Dropwizard资源测试,错误的http方法可能吗?

时间:2016-10-14 19:11:31

标签: java jax-rs dropwizard

因此,在为dropwizard应用程序编写测试时(使用的版本为0.8.2),资源(在这种特定情况下称为UserResource)已经编写完成,在测试该资源时,我得到了一个关于完全不相关的方法的错误。所以,这里是错误信息:

[FATAL] No injection source found for a parameter of type public bounswegroup3.model.User bounswegroup3.resource.UserResource.updateUser(bounswegroup3.model.AccessToken,bounswegroup3.model.User) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class bounswegroup3.resource.UserResource, handlerConstructors=[org.glassfish.jersey.server.model.HandlerConstructor@6f815e7f]}, definitionMethod=public bounswegroup3.model.User bounswegroup3.resource.UserResource.updateUser(bounswegroup3.model.AccessToken,bounswegroup3.model.User), parameters=[Parameter [type=class bounswegroup3.model.AccessToken, source=null, defaultValue=null], Parameter [type=class bounswegroup3.model.User, source=null, defaultValue=null]], responseType=class bounswegroup3.model.User}, nameBindings=[]}']

我在测试getAllUsers端点时遇到错误。这是测试的设置代码:

@ClassRule
public static final ResourceTestRule resources = ResourceTestRule.builder()
    .addResource(new UserResource(userDao, menuDao, mealDao, mailer))
    .build();

...

    ArrayList<User> res = resources.client().target("/user/").request().accept(MediaType.APPLICATION_JSON).get(ArrayList.class);

这是我测试的资源的一部分

@Path("/user")
@Produces(MediaType.APPLICATION_JSON)
public class UserResource {

...

@GET
public List<User> getUsers() {
    return dao.getUsers();
}

...

@POST
@Path("/update")
public User updateUser(@Auth AccessToken token, @Valid User user) {
    if (token.getUserId() == user.getId()) {
        dao.updateUser(user);
    }

    return user;
}

因此,似乎测试发送一个POST请求而不是一个GET,而不是路由到更新用户路径,并在它找不到请求体时抱怨。是什么导致问题和/或解决方案?

0 个答案:

没有答案