Как издеваться над строкой с помощью 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);
}
}