2014-10-29 49 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你可以找到其他的也很好的代码片段。