Как изменить значение по умолчанию для строк в Mockito?
Этот выпуск 2010 года намекает на то, что яя пытаюсь сделать.
я работаю над модульным тестом, который выполняет код, который требует много поддельных объектов, чтобы выполнить то, что ему нужно (тестирование рендеринга HTML + PDF). Чтобы этот тест был успешным, мне нужно сгенерировать много фиктивных объектов, и каждый из этих объектов в конечном итоге возвращает некоторые строковые данные в тестируемый код.
считать Я могу сделать это, реализуя либо мой собственныйAnswer
класс илиIMockitoConfiguration
, но я не уверен, как реализовать их, чтобы они влияли только на методы, которые возвращают строки.
Я чувствую, что следующий код близок к тому, что я хочу. Это бросает исключение броска,java.lang.ClassCastException: java.lang.String cannot be cast to com.mypackage.ISOCountry
, Я думаю, что это означает, что мне нужно как-то по умолчанию или ограничитьAnswer
влияет только на значения по умолчанию для.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 {
@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);
}
}
}
Как я могу настроить Mockito для возврата сгенерированной строки по умолчанию для методов в проверяемом классе, которые возвращают строку?Я нашел решение этой части вопроса о SO
Для дополнительных очков, как я могу сделать это сгенерированное значение в виде строки, которая находится в формеClass.methodName
? Например"Address.getStreet1()"
вместо просто случайной строки?