Unit testing 模拟添加提供程序(类<;?>;klass)

Unit testing 模拟添加提供程序(类<;?>;klass),unit-testing,testing,mockito,Unit Testing,Testing,Mockito,我正在试着适应莫基托 我有一节课 @Provider public class SessionProvider implements InjectableProvider<Bind, Type>{ @Override public ComponentScope getScope() { return ComponentScope.PerRequest; } @Override public Injectable getInjectab

我正在试着适应莫基托

我有一节课

@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();
   }
}
绑定批注正在使用我的提供程序。但是我当前的框架不接受SessionProvider的实例。它正在利用类实例

顺便说一下,这是一个web服务。它由我的客户机实现调用。我想用模拟会话测试我的消息。对于每个请求,都会请求一个新的请求。这就是该方法接受会话类而不是会话实例的原因

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


谢谢

默认情况下模拟返回
null

SessionProvider sessionProvider = mock(SessionProvider.class);
assertNull(sessionProvider.getInjectable(ic, bind, parameter));
对于单元测试,您可以通过使用mock调用
testPostMessage
来测试
MessageResource

messageResource.testPostMessage(mock(SessionMessage.class), mock(Message.class));
或者,您可以创建一个mock
SessionProvider
类,返回一个mock
会话

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

似乎不可能用mockito创建新的mock实例。但是你的第二个建议可以奏效。这就是我接受的原因。谢谢
messageResource.testPostMessage(mock(SessionMessage.class), mock(Message.class));
@Provider
public class MockSessionProvider  implements InjectableProvider<Bind, Type>{
    public Injectable getInjectable(ComponentContext ic, Bind bind, Type parameter) {
      return mock(Session.class);
    }
}
addProvider(MockSessionProvider.class);