如何在 Mockito 中更改字符串的默认返回值?
2022-09-04 21:25:59
我正在进行一个单元测试,该测试练习需要许多模拟对象才能执行其需要执行的操作(测试HTML + PDF呈现)的代码。为了使此测试成功,我需要生成许多模拟对象,并且这些对象中的每一个最终都会向正在测试的代码返回一些 String 数据。
我认为我可以通过实现我自己的类或 来做到这一点,但我不知道如何实现它们,因此它们只影响返回字符串的方法。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<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);
}
}
}
如何将 Mockito 设置为默认为返回 String 的模拟类上的方法返回生成的 String?我在SO上找到了这部分问题的解决方案
对于额外的分数,我如何使生成的值成为格式的字符串?例如,而不仅仅是一个随机字符串?Class.methodName
"Address.getStreet1()"