メソッドが実行されているときに、(テスト中に) 例外をスローしたいと思います。私はいくつかのことをすることができました:
- stub(mock.someMethod("some arg")).toThrow(new RuntimeException());
- when(mock.someMethod("some arg")).thenThrow(new RuntimeException())
- doThrow.....
通常、スパイ メソッドを呼び出すスパイ オブジェクトを作成します。スタブを使用すると、例外をスローできます。この例外は常にログで監視されます。さらに重要なことは、例外がスローされたメソッドがそれをキャッチして特定の値を返す可能性があるため、テストがクラッシュしないことです。ただし、次のコードでは例外はスローされません (ログでは何も監視されません && 戻り値は true ですが、false になるはずです)。
問題: この場合、例外はスローされません。
DeviceInfoHolder deviceInfoHolder = new DeviceInfoHolder();
/*Create Dummy*/
DeviceInfoHolder mockDeviceInfoHolder = mock (DeviceInfoHolder.class);
DeviceInfoHolderPopulator deviceInfoHolderPopulator = new DeviceInfoHolderPopulator();
/*Set Dummy */
deviceInfoHolderPopulator.setDeviceInfoHolder(mockDeviceInfoHolder);
/*Create spy */
DeviceInfoHolderPopulator spyDeviceInfoHolderPopulator = spy(deviceInfoHolderPopulator);
/*Just exception*/
IllegalArgumentException toThrow = new IllegalArgumentException();
/*Stubbing here*/
stub(spyDeviceInfoHolderPopulator.populateDeviceInfoHolder()).toThrow(toThrow);
/*!!!!!!Should be thrown an exception but it is not!!!!!!*/
boolean returned = spyDeviceInfoHolderPopulator.populateDeviceInfoHolder();
Log.v(tag,"Returned : "+returned);