0

私は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サービスです。クライアントの実装によって呼び出されます。モックセッションでメッセージをテストしたいと思います。そして、リクエストごとに新しいものがリクエストされます。これが、メソッドがセッション インスタンスではなくセッション クラスを受け入れる理由です。

私は本当に何かがおかしいと感じ始めましたが、どこで?

ありがとう

4

1 に答える 1

1

デフォルトではモック return null:

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

単体テストの場合、mocksMessageResourceを呼び出してテストできます: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);
于 2012-08-31T15:47:18.833 に答える