我需要模拟一个测试场景,其中我调用getBytes()
String 对象的方法,我得到一个 UnsupportedEncodingException。
我尝试使用以下代码来实现这一点:
String nonEncodedString = mock(String.class);
when(nonEncodedString.getBytes(anyString())).thenThrow(new UnsupportedEncodingException("Parsing error."));
问题是,当我运行测试用例时,我收到一个 MockitoException 异常,表明我无法模拟 java.lang.String 类。
有没有办法使用mockito来模拟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);
}
}
问题是String
Java 中的类被标记为 Final,因此您无法使用传统的模拟框架进行模拟。根据Mockito 常见问题解答 https://github.com/mockito/mockito/wiki/FAQ,这也是该框架的限制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)