我需要模拟一种测试情况,即调用String对象的getBytes()方法时会出现UnsupportedEncodingException。
我尝试使用以下代码来实现:
String nonEncodedString = mock(String.class);
when(nonEncodedString.getBytes(anyString())).thenThrow(new UnsupportedEncodingException("Parsing error."));
问题在于当我运行测试用例时,我会收到一个MockitoException的异常,指出我不能mock一个java.lang.String类。
是否有一种方法可以使用mockito来mock String对象,或者另外一种方式,使我的String对象在调用getBytes方法时抛出UnsupportedEncodingException异常?
以下是更多细节以说明问题:
这是我想要测试的类:
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);
}
}