Jak wyszydzić String za pomocą mockito?

Muszę symulować scenariusz testowy, w którym dzwonięgetBytes() metoda obiektu String i otrzymuję wyjątek UnsupportedEncodingException.

Próbowałem to osiągnąć za pomocą następującego kodu:

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

Problem polega na tym, że gdy uruchamiam mój przypadek testowy, otrzymuję wyjątek MockitoException, który mówi, że nie mogę wykluczyć klasy java.lang.String.

Czy istnieje sposób na wycięcie obiektu String za pomocą mockito lub, alternatywnie, sposób na spowodowanie, aby mój obiekt String rzucił wyjątek UnsupportedEncodingException, gdy wywołam metodę getBytes?

Oto więcej szczegółów ilustrujących problem:

To jest klasa, którą chcę przetestować:

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.
            ...
        }
    }
}

To jest moja klasa testowa (używam JUnit 4 i 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);
    }
}

questionAnswers(14)

yourAnswerToTheQuestion