Как издеваться над строкой с помощью mockito?

Мне нужно смоделировать тестовый сценарий, в котором я называюgetBytes() метод объекта String, и я получаю исключение UnsupportedEncodingException.

Я пытался добиться этого с помощью следующего кода:

String nonEncodedString = mock(String.class);
when(nonEncodedString.getBytes(anyString())).thenThrow(new UnsupportedEncodingException("Parsing error."));

Проблема в том, что когда я запускаю свой тестовый пример, я получаю исключение MockitoException, которое говорит, что я не могу издеваться над классом java.lang.String.

Есть ли способ смоделировать объект String с помощью mockito или, альтернативно, способ заставить мой объект String генерировать исключение UnsupportedEncodingException при вызове метода getBytes?

Вот больше деталей, чтобы проиллюстрировать проблему:

Это класс, который я хочу проверить:

public final class A {
    public static String f(String str){
        try {
            return new String(str.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            // This is the catch block that I want to exercise.
            ...
        }
    }
}

Это мой класс тестирования (я использую JUnit 4 и mockito):

public class TestA {

    @Test(expected=UnsupportedEncodingException.class)
    public void test(){
        String aString = mock(String.class);
        when(nonEncodedString.getBytes(anyString())).thenThrow(new UnsupportedEncodingException("Parsing error."));
        A.f(aString);
    }
}

Ответы на вопрос(14)

Ваш ответ на вопрос