【发布时间】:2014-10-29 12:39:22
【问题描述】:
我正在尝试编写集成测试以查看文件是否从 url 正确下载。 我不确定如何测试它,因为我希望在 byte[] 中获取文件,但我不太确定要与之比较的图像。 我考虑过手动下载文件,然后将其转换为字节并获取结果并将其作为预期值粘贴到代码中,然后将其与我得到的结果进行比较。 如果您有更好的想法,我会很高兴听到。
谢谢:)
【问题讨论】:
标签: java testing integration-testing
我正在尝试编写集成测试以查看文件是否从 url 正确下载。 我不确定如何测试它,因为我希望在 byte[] 中获取文件,但我不太确定要与之比较的图像。 我考虑过手动下载文件,然后将其转换为字节并获取结果并将其作为预期值粘贴到代码中,然后将其与我得到的结果进行比较。 如果您有更好的想法,我会很高兴听到。
谢谢:)
【问题讨论】:
标签: java testing integration-testing
比较图像的哈希值会很有帮助。
您可以使用 MD5 或 SHA-1 等哈希算法。如果文件较小,MD5 是好的。对于大量文件比较,SHA-1 会很有用,因为冲突会更少。
【讨论】:
既然你正在使用和
期望得到字节[]中的文件
有一个输入流装饰器java.security.DigestInputStream 或java.security.MessageDigest,这样您就可以在使用输入流时计算摘要。
import java.io.*;
import java.security.MessageDigest;
public class MD5Checksum {
public static byte[] createChecksum(String filename) throws Exception {
InputStream fis = new FileInputStream(filename);
byte[] buffer = new byte[1024];
MessageDigest complete = MessageDigest.getInstance("MD5");
int numRead;
do {
numRead = fis.read(buffer);
if (numRead > 0) {
complete.update(buffer, 0, numRead);
}
} while (numRead != -1);
fis.close();
return complete.digest();
}
public static String getMD5Checksum(String filename) throws Exception {
byte[] b = createChecksum(filename);
String result = "";
for (int i=0; i < b.length; i++) {
result += Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
}
return result;
}
public static void main(String args[]) {
try {
System.out.println(getMD5Checksum("apache-tomcat-5.5.17.exe"));
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Here你可以找到其他也很好的代码sn-ps。
【讨论】: