0

モキートの新機能。私はまだこれがどのように機能するかを理解しようとしています。

たとえば、クラスをモックすると、そのクラス内のすべてのクラスが自動的にモックされますか?

  class Bank {
     Customer cust;
     cust.deposit(102, CHECK);
  }

  class Customer {
     Account acct;
     public deposit(int amount, Type t) {
         return account.getLimits( t );
     }
  }

  class Account {
    AccTypes types;
    public getLimits(Type t)  {
      int res =  types.getAccountType(t);
      return res;
    }
  }

  class AccTypes {
    pulic getACcountTypes( Type t){
       return something;
    }
  }
  1. をモックすると、Bank自動的に もモックされますか?AccountCustomerAccTypes
  2. deposit()メソッドをテストするにはどうすればよいですか? (最終的には に到達する必要getAccountTypesがありAccTypesます) (コードは説明付きでお願いします)。

これは非常に単純であることに注意してください (実際には疑似コードです)。したがって、完全な Java コードではない可能性があります。しかし、これは私が何を達成しようとしているのかを理解するためのものです。

4

2 に答える 2

4

モックは、モックするクラスまたはインターフェイスと同じ非プライベート メソッドのみを実装します。モックするクラスに参照がある場合でも、他のオブジェクトへの参照は含まれません。

メソッドの動作を単体テストするには、deposit()のすべての依存関係のモックを作成しますCustomer。唯一の依存関係があるAccountので、それをモックしましょう:

 Account accMock = Mockito.mock(Account.class);
 Mockito.when(accMock.getLimits(Type.SOME_TYPE)).thenReturn(500);

accMock.getLimits()これで、何かが で呼び出されるたびにType.SOME_TYPE、500 が返されます。他のパラメーターで呼び出された場合、デフォルト値が返されます (戻り値の型に応じて 、 ) 0false null次に、テストするオブジェクトを作成し、アカウント フィールドをモックに設定します。

 Customer customer = new Customer();
 customer.setAccount(accMock);

テストするメソッドを呼び出します。つまり、次のようにしますdeposit()

 customer.deposit(100, Type.SOME_TYPE);

次に、メソッドの動作を確認します。getLimits()呼び出しがType.SOME_TYPEあり、他に何もないことが期待されます。

 // verify that getLimits() is invoked for Type.SOME_TYPE
 Mocktio.verify(accMock).getLimits(Type.SOME_TYPE);
 // verify that no other method is called on accMock
 Mockito.verifyNoMoreInteractions(accMock);
于 2013-07-04T21:37:23.620 に答える
0

私はあなたの質問を誤解しているかもしれませんが、Mockito で Bank をモックしてそのモックを呼び出すと、Bank クラスで実装ロジックを呼び出すことはなくなります。そのため、Mockito がそれらの依存クラスをモックアウトする理由はありません。

Bank への呼び出しからモック化されたクラスを返したい場合は、指定された呼び出しに必要なものを返すように Bank モックをセットアップできます。それ以外の場合は、それらの他のクラスのモックを作成する必要はありません。

例えば

@Mock
private Bank bankMock;

when(bankMock.getAccount().thenReturn(mock(Account.class));
于 2013-07-04T21:33:49.443 に答える