1

パラメータとして情報を持つオブジェクトを取得するメソッドをテストしたい:

//mocking a user object with some random data
User user createMockUser(loginName, firstName, lastName, salutation, company, mailAddress);
//do something with that user object 
foo(user);

テストの焦点は、foo(user) をテストすることです。

createMockUser() のこれらのバリアントを使用すると、次のようになります。

when 関数の使用:

protected User createMockUser(String loginName, String firstName, 
        String lastName, String salutation, String mailAddress) 
{
    User user = Mockito.mock(User.class);

    Mockito.when(user.getLoginName()).thenReturn(id);
    Mockito.when(user.getFirstName()).thenReturn(firstName);
    Mockito.when(user.getLastName()).thenReturn(lastName);
    Mockito.when(user.getSalutation()).thenReturn(salutation);
    Mockito.when(user.getMailAddress()).thenReturn(mailAddress);        
    return user;
}

スパイの使用:

protected User createMockUser(String loginName, String firstName, 
        String lastName, String salutation, String mailAddress) 
{

    User spyUser = spy(new User());
    spyUser.setLoginName(loginName);
    spyUser.setFirstName(firstName); 
    spyUser.setLastName(lastName); 
    spyUser.setSalutation(salutation); 
    Mockito.when(spyUser.getMailAddress()).thenReturn(mailAddress); 

    return spyUser;
}

これはまったく機能しません。

protected User createMockUser(String loginName, String firstName, 
        String lastName, String salutation, String mailAddress) 
{
    User user;
    user = Mockito.mock(User.class);
    user.setLoginName(loginName);
    user.setFirstName(firstName);
    user.setLastName(lastName);
    user.setSalutation(salutation);
    Mockito.when(user.getMailAddress()).thenReturn(mailAddress);        
    return user;
}

私はまだmockitoに慣れていませんが、私が得たものから、スパイは実際にオブジェクトのメソッドを使用してオブジェクトに値を持ち、get関数呼び出しを行ってモックに示されているものを返すだけです。しかし、このテストでは、foo のみをテストしたいので、結果に関しては基本的に同じです。それで、どれがより良いでしょうか、それとももっとエレガントな方法がありますか?

4

1 に答える 1

0

通常、単純な Bean をモックすることは面白くありません。getter を呼び出すと、setter メソッドで設定した値が返されます。大きな問題ではない。

一方、セッターまたはゲッターが呼び出された回数とパラメーターを確認したい場合は、単純な Bean をスパイすることは理にかなっています。したがって、検証のために、スパイはまったく問題なく、理にかなっています。

于 2013-11-06T23:06:39.810 に答える