Wie verspotte ich einen String mit mockito?

Ich muss ein Testszenario simulieren, in dem ich das aufrufegetBytes() Methode eines String-Objekts und ich bekomme eine UnsupportedEncodingException.

Ich habe versucht, das mit dem folgenden Code zu erreichen:

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

Das Problem ist, dass ich beim Ausführen meines Testfalls eine MockitoException erhalte, die besagt, dass ich eine java.lang.String-Klasse nicht verspotten kann.

Gibt es eine Möglichkeit, ein String-Objekt mit mockito zu verspotten, oder eine Möglichkeit, mein String-Objekt beim Aufrufen der getBytes-Methode eine UnsupportedEncodingException auszulösen?

Hier sind weitere Details, um das Problem zu veranschaulichen:

Dies ist die Klasse, die ich testen möchte:

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

Dies ist meine Testklasse (ich benutze JUnit 4 und 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);
    }
}

Antworten auf die Frage(14)

Ihre Antwort auf die Frage