ユニットテストでは、IOストリームの読み書きをシミュレートする際のclose()メソッドが異常を放出
1219 ワード
シーン:IOExceptionクラスに対してユニットテストを行い、カバー率は100%に達する
ターゲットコード:
public static String getMD5ValueOfFile(InputStream fileStream) {
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("MD5");
//
byte[] buffer = new byte[1024];
// length
int length = -1;
while ((length = fileStream.read(buffer, 0, buffer.length)) != -1) {
digest.update(buffer, 0, length);//
}
} catch (Exception e) {
e.printStackTrace();
return "error";
} finally {//
if (fileStream != null) {
try {
fileStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
テストクラス:
@Test(expected = IOException.class)
public void testGetMD5ValueOfFileCloseException() throws Exception {
FileInputStream inputStream = mock(FileInputStream.class);
byte[] buffer = new byte[1024];
PowerMockito.when(inputStream,method(FileInputStream.class,"close")).withNoArguments().thenThrow(new IOException());
when(inputStream.read(buffer, 0, buffer.length)).thenReturn(-1);
MD5Util.getMD5ValueOfFile(inputStream);
}