模拟addProvider(Class <! - ? - > klass)

时间:2012-08-31 14:20:13

标签: unit-testing testing mockito

我正在尝试使用Mockito。

我有一个班级

@Provider
public class SessionProvider  implements InjectableProvider<Bind, Type>{


   @Override
   public ComponentScope getScope() {
      return ComponentScope.PerRequest;
   }

   @Override
   public Injectable getInjectable(ComponentContext ic, Bind bind, Type parameter) {
      return new SessionInjectable();
   }
}

尝试在调用getInjectable时返回null。

我的用例就是这样

public void addProvider(Class<?> klass) {
    providers.add(klass);
}

addProvider(SessionProvider.class);

如何成功模拟SessionProvider.class?

由于

编辑:

我的课程是这样的:

@Path("message")
@Produces(MediaType.APPLICATION_JSON)
public class MessageResource {

   @POST
   @Path("post")
   public String testPostMessage(@Bind Session session, Message message) {
       return "posted";
   }
}

绑定注释正在使用我的提供程序。但我当前的框架不接受SessionProvider的实例。它正在使用Class实例。

顺便说一下,这是一个Web服务。它由我的客户端实现调用。我想用模拟会话来测试我的消息。并且对于每个请求,请求新的请求。这就是该方法接受Session Class而不是Session Instance的原因。

我真的开始觉得有什么不对,但在哪里?

由于

1 个答案:

答案 0 :(得分:1)

默认情况下,模拟返回null

SessionProvider sessionProvider = mock(SessionProvider.class);
assertNull(sessionProvider.getInjectable(ic, bind, parameter));

对于单元测试,您可以通过使用模拟调用MessageResource来测试testPostMessage

messageResource.testPostMessage(mock(SessionMessage.class), mock(Message.class));

或者,您可以创建一个模拟SessionProvider类,返回模拟Session

@Provider
public class MockSessionProvider  implements InjectableProvider<Bind, Type>{
    public Injectable getInjectable(ComponentContext ic, Bind bind, Type parameter) {
      return mock(Session.class);
    }
}

然后在框架上注册:

addProvider(MockSessionProvider.class);