私は自分自身を教えようと苦労しています。Mockito "when" problem
は本当に思考の私の方法で実行するべきではない以下のような方法、hasInventory()を、考えてみましょう、しかし真か偽私のようにかご形に私のテストを返すように設定します。クラス倉庫は私の "嘲笑依存"です。 JUnitテストコードで
public class Warehouse implements IWarehouse
{
private Map< String, Integer > inventory;
public Warehouse()
{
this.inventory = new HashMap< String, Integer >();
}
public final boolean hasInventory(String itemname, int quantity)
throws InventoryDoesNotExistException
{
if(inventory == null)
throw new InventoryDoesNotExistException();
if(!inventory.containsKey(itemname))
return false;
int current = (inventory.containsKey(itemname)) ? inventory.get(itemname) : 0;
return(current >= quantity);
}
...
、最初()は文字通りメソッド呼び出し(これを実行する)と、在庫はゼロである(上記参照)を解釈するためがInventoryDoesNotExistExceptionは、例外をスロースローされる。嘲笑依存性のクラスの他の方法はアドオン()とのremove()のように、あまりにもあります。
@RunWith(MockitoJUnitRunner.class)
public class OrderInteractionTest
{
private static final String TALISKER = "Talisker";
private Order systemUnderTest = null;
@Mock
private Warehouse mockedDependency = null;
@Before
public void init()
{
//MockitoAnnotations.initMocks(this);
//mockedDependency = mock(Warehouse.class);
this.systemUnderTest = new Order(TALISKER, 50);
}
@Test
public void testFillingRemovesInventoryIfInStock()
{
try
{
doNothing().doThrow(new RuntimeException()).when(mockedDependency).add(anyString(), anyInt());
doNothing().doThrow(new RuntimeException()).when(mockedDependency).remove(anyString(), anyInt());
when(mockedDependency.hasInventory(anyString(), anyInt())).thenReturn(true);
when(mockedDependency.getInventory(anyString())).thenReturn(50);
私はとき(で、それを理解したよう)方法、私は正確にhasInventory()を呼び出すことではないが、それは私のテストと呼ばれていたときにだけではなく、真を返すようにMockitoを求めていますクラス( "systemUnderTest")。誰もが私はこのポイントを過ぎて(または私の脳にいくつかの意味を得る)助けることができますか?
私はmockito-すべて-1.8.5.jarとJUnitこれを読んですべての人に4
多量の感謝をリンクしています。
ラス
ハ!はい、それは問題です。実際、私は今日これについて何かを読んでいますが、私は接続しませんでした。他のチュートリアルを模倣して、私はIWarehouseを模擬し始めていたので、それは動作していたので、私はインターフェイスをモックできたと思った(私は単純なクラスを模擬できると言った数週間前に誰かに話していたので、私は多くの現実のシナリオで考えて以来、インターフェイスを模擬するために、私はインターフェイスを持っていないだろう)。しかし、これは正解です!これはありがとうございます。 –