2014-10-29 52 views
0

我想寫一個集成測試,看看是否正確地從一個URL下載文件。 我不知道如何測試這個,因爲我期望得到的文件在字節[],但我不確定我比較它的圖像。 我想過要手動下載文件,然後將其轉換爲字節,並將結果作爲期望值粘貼到代碼中,然後將其與我得到的結果進行比較。 如果你有更好的主意,我會很高興聽到它。集成測試的圖像下載java

謝謝:)

回答

5

比較圖像的散列值會有幫助。

  1. 計算下載文件前後的哈希值。
  2. 比較散列值。如果他們是平等的,你的文件的完整性是好的。

您可以使用散列算法,如MD5或SHA-1。如果文件較小,則MD5很好。對於大量的文件比較,SHA-1將會很有用,因爲衝突較少。

+0

你好。我發現你的回答很有趣。我面臨着一個類似的情況,即Web應用程序生成要下載的文件。您的答案在這種情況下是否也有效?我發佈了一個[問題](https://stackoverflow.com/questions/47167826/integration-tests-who-download-files)。 TIA。 – Francesco 2017-11-08 07:14:59

1

由於您使用和

期望能獲得字節文件[]

有一個輸入流裝飾,java.security.DigestInputStreamjava.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你可以找到其他的也很好的代碼片段。