【问题标题】:Mocking addProvider(Class<?> klass)模拟 addProvider(Class<?> 类)
【发布时间】:2012-08-31 14:20:13
【问题描述】:

我正在尝试使用 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 实例。

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

我真的开始觉得哪里不对劲了?

谢谢

【问题讨论】:

    标签: unit-testing testing mockito


    【解决方案1】:

    默认情况下模拟返回null

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

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

    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);
    

    【讨论】:

    • 似乎不可能用mockito创建新的mock实例。但是你的第二个建议可以奏效。这就是我接受的原因。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多