2017-04-14 14 views
0

Jerseyを使ったRESTサービスのためにJUnitとMockitoを使ってテストケースを書いています。私は、Responseクラスの模擬オブジェクトの代わりにnullオブジェクトを取得しています。Mockitoを使った模擬型

コードテスト

Response response = builder 
         .put(Entity.entity(new ByteArrayInputStream(jsonObj.toString().getBytes()), MediaType.APPLICATION_JSON), Response.class); 

テストケースの下で:

private Invocation.Builder builder; 
private Entity<ByteArrayInputStream> inputStream; 
private Response response; 
@Before 
public void setUp() throws Exception { 
    builder = mock(Invocation.Builder.class); 
    inputStream = (Entity<ByteArrayInputStream>)mock(Entity.class); 
    response = mock(Response.class); 
} 

@Test 
public void myTest() { 
when(builder.put(inputStream, Response.class)).thenReturn(response); 
} 

だから、このコード行は私にヌル応答を与えます。これを行う他の方法はありますか?

ありがとうございました。

答えて

0

私はこの問題を解決したので、私が実際に行ったことを共有すると考えました。 Mockito.when(builder.put(any(Entity.class), any(Class.class))).thenReturn(response);

上記の文は私に嘲笑された応答を与えます。今私は嘲笑されたレスポンスオブジェクトを使って私が望むことをすることができます。私はgetStatusメソッドを模倣し、ステータスコードまたは何かを返すことができます。

これはMockitoとPowerMockito Apiの方に役立ちます。

0

これは、さまざまなことを混ぜているからです。

本番コードが行いますので、

Entity.entity(new ByteArrayInputStream(... 

、あなたがそこにある得たもの:

  • 静的コール(Entity.entity()
  • コール
new

これらの両方の操作ons できませんはMockitoと嘲笑される。それはそれと同じくらい簡単です。

メソッド呼び出しでstaticメソッドを呼び出すには、PowerMock(ito)やJMockitなどのフレームワークを調べる必要があります。

しかし、私はむしろ別の解決策を推奨します。生産コードを再作成することです。代わりに静的な+新しい呼び出し;

interface EntityProvider { 
    public Entity of(bytes[] data, MediaType type); 
} 

のようなものを作成するあなたは簡単にあなたの現在のコードを使用してのimplクラスを作成することができます - しかし、テストの目的のために、あなたは、依存性注入することができ(Mockito.mock(経由で作成))そのインターフェイスのモックを。突然、あなたのコード全体がMockitoで再びテスト可能になります。

他のモッキングフレームワークを調べる必要はありません(少なくとも、PowerMockitoにはある程度のコストがかかります - 単に他のフレームワークに切り替えるだけではありません)。

関連する問題