2017-06-08 245 views
2

以下のコード行を持つメソッドがあります。私のテスト方法ではMockitoを使ってメソッドチェーンをモックする方法

getRequestedCapabilities(){ 
     ObjectMapper mapper = new ObjectMapper(); 

Capabilities capabilities = mapper.readValue(new 
File(getClass().getClassLoader().getResource(jsonFilePath).getFile()), Capabilities.class); 

} 

私はmapper.readValueは()が呼び出されたときに返す必要がありDTO(能力)を用意しました。

Mockito.when(mapper.readValue(Mockito.mock(File.class),Mockito.eq(Capabilities.class))).thenReturn(capabilities); 

しかし、私はマッチャーの無効な使用を言っている例外があります。 どうすればいいですか?ここで問題は、メソッドの呼び出し連鎖を持つmapper.readValueメソッドに渡されるパラメータをどうやって模倣すべきかということです。

+0

の可能性のある重複した[モックやチェーンのコール用のスタブ](https://stackoverflow.com/questions/7926891/mock-or-stub-for-chained-call) –

答えて

0

readValueが任意のパラメータを受け取った場合、それはcapabilitiesオブジェクトを返すように単純に指定できます。このような何か:

ObjectMapper mapper = mock(ObjectMapper.class); 
Mockito.when(mapper.readValue(any(), any())).thenReturn(capabilities); 

しかし、あなたはあなたのモック記録をより具体的にしたい場合、あなたはそれを使って呼び出されるべきパラメータの種類を指定することができます。

ObjectMapper mapper = mock(ObjectMapper.class); 
Mockito.when(mapper.readValue(any(File.class), any(Capabilities.class))).thenReturn(capabilities); 

UPDATE:このよう 手動でファイルパスの値を設定することができます。結局、単体テストでは、テストで直接値を宣言することができます。それ以外の場合は、他のコンポーネントとやり取りしていることを前提として、テストはもうユニットテストではありません。

+0

の場合でMockito.mock(File.class)を交換する必要があります私は直接ファイルのパスを与える、それはあなたが示唆したアプローチで模擬することができます。 'code'機能ケイパビリティ= mapper.readValue(新しいファイル(" C:\\ユーザー\\ krp2 \\ xACTコードベース\\シンフォニーSDK \\システム - スターター - SDK \\ " +" src \\ capabilityregistrationrequest.json ")、Capabilities.class); 'code'しかし、もし私が問題の与えられたメソッド呼出し連鎖を使うなら、それは模擬することができません。ヌルポインタ例外を取得する –

+0

あなたのメソッドチェーンに' null'を返すメソッドはどれですか? – alayor

+0

おそらくそのファイルはテストリソースにはありません。 – alayor

0
Mockito.when(mapper.readValue(Mockito.mock(File.class),Mockito.eq(Capabilities.class))).thenReturn(capabilities); 

これはMockito.mockから来ています。パラメータマッチャーを使用する場合、すべてのパラメーターはマッチャーでなければなりません。その後、Mockito.any(File.class)またはMockito.eq(a properly initialized mock)

関連する問題