سؤال

كيف يمكنني استخلاص طريقة بحيث عند إعطاء قيمة لا أتوقعها ، فإنها تُرجع قيمة افتراضية؟

علي سبيل المثال:

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");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top