الافتراضات الافتراضية في Mockito
سؤال
كيف يمكنني استخلاص طريقة بحيث عند إعطاء قيمة لا أتوقعها ، فإنها تُرجع قيمة افتراضية؟
علي سبيل المثال:
Map<String, String> map = mock(Map.class);
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
when(map.get(anyString())).thenReturn("I don't know that string");
الجزء 2: على النحو الوارد أعلاه ولكن يلقي استثناء:
Map<String, String> map = mock(Map.class);
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
when(map.get(anyString())).thenThrow(new IllegalArgumentException("I don't know that string"));
في الأمثلة المذكورة أعلاه ، فإن الكعب الأخير له الأسبقية بحيث ستعود الخريطة دائمًا إلى الافتراضي.
المحلول
أفضل الحلول التي وجدتها هي عكس ترتيب الكعب:
Map<String, String> map = mock(Map.class);
when(map.get(anyString())).thenReturn("I don't know that string");
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
عندما يكون الافتراضي هو رمي استثناء ، يمكنك فقط استخدام Dothrow و Doreturn
doThrow(new RuntimeException()).when(map).get(anyString());
doReturn("defg").when(map).get("abcd");
doReturn("ghij").when(map).get("defg");
https://static.javadoc.io/org.mockito/mockito-core/2.18.3/org/mockito/mockito.html#12
نصائح أخرى
when(map.get(anyString())).thenAnswer(new Answer<String>() {
public String answer(Invocation invocation) {
String arg = (String) invocation.getArguments()[0];
if (args.equals("abcd")
return "defg";
// etc.
else
return "default";
// or throw new Exception()
}
});
إنه نوع من طريقة الدوار للقيام بذلك. ولكن يجب أن تعمل.
يمكنك استخدام:
Map<String, String> map = mock(Map.class, new Returns("I don't know that string"));
when(map.get("abcd")).thenReturn("defg");
when(map.get("defg")).thenReturn("ghij");
لا تنتمي إلى StackOverflow