我想寫一個集成測試,看看是否正確地從一個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