5

これは、例外を伴う void メソッドのスタブに関する主要なMockitoドキュメントです。ただし、Mockito doc の例では、パラメーターなしのメソッドがスタブ化されています。メソッドにパラメーターがあり、パラメーターが契約を満たさない場合にメソッドが例外をスローするとどうなりますか?

では、次のクラスでは...

public class UserAccountManager {    
   /**
    * @throws Exception if user with provided username already exists
    */
    public void createAccount(User user) throws Exception {
        // db access code ...
    }
}

... UserAccountManager.createAccountMockitoでモックして、特定の User オブジェクトが引数としてメソッドに渡された場合に例外をスローするにはどうすればよいですか?

4

1 に答える 1

10

Mockitoのドキュメントには、パラメーターなしのvoid メソッドを例外付きでスタブする方法の例が既に示されています。

ただし、パラメーターと例外を使用して void メソッドをスタブするには、次のようにします。

createAccountの戻り値の型は voidであるため、 doThrowを使用する必要があります。

User existingUser = ... // Construct a user which is supposed to exist
UserAccountManager accountMng = mock(UserAccountManager.class);    

doThrow(new Exception()).when(accountMng).createAccount(eq(existingUser));

eq Matcherの使用法に注意してください。引数の型 (この場合はユーザー) がそれ自体でequalsを実装していない場合は、 refEqマッチャーを使用することもできます。

于 2013-03-28T13:06:22.143 に答える