13

2010 年のこの問題は、私がやろうとしていることを示唆しています。

私は、必要なことを実行するために多くの模擬オブジェクトを必要とするコードを実行する単体テストに取り組んでいます (HTML + PDF レンダリングのテスト)。このテストを成功させるには、多数のモック オブジェクトを生成する必要があり、これらの各オブジェクトは最終的にテスト対象のコードに String データを返します。

私は自分のクラスまたはを実装することでこれを行うことができると思いますが、それらを実装する方法がわからないため、文字列を返すメソッドにのみ影響します。AnswerIMockitoConfiguration

次のコードは、私が望むものに近いと感じています。キャスト例外をスローしますjava.lang.ClassCastException: java.lang.String cannot be cast to com.mypackage.ISOCountryAnswerこれは、 のデフォルトのみに影響を与えるように何らかの方法でデフォルトまたは制限する必要があることを意味すると思いますString

private Address createAddress(){
    Address address = mock(Address.class, new StringAnswer() );

    /* I want to replace repetitive calls like this, with a default string. 
    I just need these getters to return a String, not a specific string.

    when(address.getLocality()).thenReturn("Louisville");
    when(address.getStreet1()).thenReturn("1234 Fake Street Ln.");
    when(address.getStreet2()).thenReturn("Suite 1337");
    when(address.getRegion()).thenReturn("AK");
    when(address.getPostal()).thenReturn("45069");   
    */

    ISOCountry isoCountry = mock(ISOCountry.class);
    when(isoCountry.getIsocode()).thenReturn("US");
    when(address.getCountry()).thenReturn(isoCountry);

    return address;
}

//EDIT: This method returns an arbitrary string
private class StringAnswer implements Answer<Object> {
    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        String generatedString = "Generated String!";
           if( invocation.getMethod().getReturnType().isInstance( generatedString )){
               return generatedString;
           }
           else{
               return Mockito.RETURNS_DEFAULTS.answer(invocation);
           }
       }
}

String を返すモック化されたクラスのメソッドに対して、デフォルトで生成された String を返すように Mockito を設定するにはどうすればよいですか? SOに関する質問のこの部分の解決策を見つけました

追加のポイントについては、生成された値を次の形式の文字列にするにはどうすればよいClass.methodNameですか? たとえば"Address.getStreet1()"、ランダムな文字列の代わりに?

4

1 に答える 1