我需要模拟一个测试场景,其中我调用String对象的getBytes()方法,我得到一个UnsupportedEncodingException。
我试图实现那使用下面的代码:
String nonEncodedString = mock(String.class);
when(nonEncodedString.getBytes(anyString())).thenThrow(new UnsupportedEncodingException("Parsing error."));
问题是,当我运行我的测试用例,我得到一个MockitoException,说我不能模拟java.lang.String类。
有没有办法使用mockito模拟一个String对象,或者,当我调用getBytes方法时,一个方法让我的String对象抛出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);
}
}