我正在对下面的代码段进行测试,我很难让这个方法抛出ioexception,这样我就可以获得100%的覆盖率。我曾试图嘲笑chararrayreader和stringwriter类,但没有成功。非常感谢您的帮助!
要测试的类
public static final String getValue(String content) {
if (content == null) return null;
CharArrayReader reader = new CharArrayReader(content.toCharArray());
StringWriter writer = new StringWriter();
try {
int c;
while ((c = reader.read()) != -1) {
if (isChinese((char)c)) {
writer.write(c);
} else {
if ( (char)c > 0x20 && (char)c < 0x7f ) {
writer.write(c);
} else {
writer.write(' ');
}
}
}
} catch (IOException e) {
return null;
} finally {
reader.close();
}
return writer.toString();
}
我的尝试
@Test
public void getValue_Exception() throws IOException {
String content = "asd";
char[] chara = null;
CharArrayReader reader = mock(CharArrayReader.class);
when(content.toCharArray()).thenReturn(chara);
when(reader.read()).thenThrow(IOException.class);
StringWriter writer = mock(StringWriter.class);
doThrow(IOException.class).when(writer).write(anyInt());
spyController.getValue(content);
}
2条答案
按热度按时间bt1cpqcv1#
唯一的情况是
CharArrayReader::read
投掷IOException
是流关闭的时间。在你的例子中,这似乎是不可能的。然而,如果你真的想得到100%的覆盖率,或者只是想确保你的类在意外情况下的行为,我的建议是为你的读者创建一个工厂,例如:
有了这个类,您可以在代码中使用它并模拟
createFromString
方法。这样,您就可以控制Reader
正在测试用例中使用。9wbgstp72#
在图书馆里看书的时候
CharArrayReader
班级IOException
当char[] buff
构造函数中的参数为null
.一种方法(即使模拟string类是个坏主意)是模拟方法的调用
toCharArray()
从String
类返回一个null
价值