我需要模拟一个测试场景,在该场景中我调用getBytes()
String 对象的方法并得到 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);
}
}