ユニットテストでは、IOストリームの読み書きをシミュレートする際のclose()メソッドが異常を放出


シーン: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);
}