我想写一个集成测试,看看是否正确地从一个URL下载文件。 我不知道如何测试这个,因为我期望得到的文件在字节[],但我不确定我比较它的图像。 我想过要手动下载文件,然后将其转换为字节,并将结果作为期望值粘贴到代码中,然后将其与我得到的结果进行比较。 如果你有更好的主意,我会很高兴听到它。集成测试的图像下载java
谢谢:)
我想写一个集成测试,看看是否正确地从一个URL下载文件。 我不知道如何测试这个,因为我期望得到的文件在字节[],但我不确定我比较它的图像。 我想过要手动下载文件,然后将其转换为字节,并将结果作为期望值粘贴到代码中,然后将其与我得到的结果进行比较。 如果你有更好的主意,我会很高兴听到它。集成测试的图像下载java
谢谢:)
比较图像的散列值会有帮助。
您可以使用散列算法,如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你可以找到其他的也很好的代码片段。
你好。我发现你的回答很有趣。我面临着一个类似的情况,即Web应用程序生成要下载的文件。您的答案在这种情况下是否也有效?我发布了一个[问题](https://stackoverflow.com/questions/47167826/integration-tests-who-download-files)。 TIA。 – Francesco 2017-11-08 07:14:59