因此,在为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,而不是路由到更新用户路径,并在它找不到请求体时抱怨。是什么导致问题和/或解决方案?