2011-08-17 37 views
2

は、私は単純なコードを持っている:mockitoを実装する方法は?

private MoneyTransferServiceBean moneyTransferService; 
AccountService mockedAccountService = mock(AccountService.class); 
doReturn(true).when(mockedAccountService).verifyBalance("request"); 
MoneyTransfer moneyTransfer = moneyTransferService.new MoneyTransfer(transferRequest); 
moneyTransfer.verifySrcBalance(); 

をしかし、これは有効になりません。このしようと

イムイムは、()accountService.verifyBalanceためのダミーを実装作る方法

public interface AccountService { 
    public boolean verifyBalance(AccountInfo account); 
} 


public class MoneyTransferServiceBean implements MoneyTransferService { 
    private AccountService accountService; 

    class MoneyTransfer { 
     private TransferRequest request; 
     public MoneyTransfer(TransferRequest request) { 
      this.request = request; 
     } 

     private void verifySrcBalance() throws TransferException { 
      if (!accountService.verifyBalance("request") 
       throw new TransferException("LOW_BALANCE_ERROR_MESSAGE"); 
     } 

    } 
} 

答えて

2

一般的なdoX()メソッドは、例外のスローとvoidメソッドのモックに使用されます。 ([method_call])then thenX(); 最初にモックを作成し、セッターやホワイトボックスでテストサービスにあなたのモックを置く:

MoneyTransferServiceBean moneyTransferService = new MoneyTransferServiceBean(); 
AccountService mockedAccountService = mock(AccountService.class); 
Whitebox.setInternalState(moneyTransferService , "accountService", mockedAccountService); 

あなたはこのようなモックとの相互作用を模擬する必要があります

when(mockedAccountService.verifyBalance(eq(accInfo)).thenReturn(true); 
verify(mockedAccountService).verifyBalance(accInfo); 
verifyNoMoreInteractions(mockedAccountService); 

それをすべて説明するMockitoサイト上の素敵な例があります。 。

関連する問題