2014-10-29 18 views
0

통합 테스트를 작성하여 URL에서 파일이 올바르게 다운로드되었는지 확인하려고합니다. 파일을 바이트 []로 가져올 것으로 예상하기 때문에 이것을 테스트하는 방법을 모르지만 비교할 이미지가 있는지 잘 모르겠습니다. 파일을 수동으로 다운로드 한 다음 바이트로 변환하여 결과를 가져 와서 예상 값으로 코드에 붙여 넣은 결과와 비교합니다. 당신이 더 좋은 생각이 있다면 나는 그것을 듣게되어 기쁠 것입니다.이미지 다운로드 자바 통합 테스트

감사 :

답변

5

이미지의 해시 값 비교가 도움이 될 것입니다.

  1. 파일을 다운로드하기 전과 후에 해시 값을 계산하십시오.
  2. 해시 값을 비교하십시오. 파일 크기가 같으면 파일의 무결성이 좋습니다.

MD5 또는 SHA-1과 같은 해시 알고리즘을 사용할 수 있습니다. 파일이 작 으면 MD5가 좋습니다. 많은 수의 파일 비교를 위해 SHA-1은 충돌이 줄어들 기 때문에 유용 할 것입니다.

+0

안녕하세요. 네 대답이 흥미 롭다. 웹 응용 프로그램이 다운로드 할 파일을 생성하는 비슷한 시나리오에 직면하고 있습니다. 당신의 대답은 그 시나리오에서도 유효합니까? 내가 [질문] (https://stackoverflow.com/questions/47167826/integration-tests-who-download-files)을 게시합니다. TIA. – Francesco

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 다른 좋은 코드 스 니펫을 찾을 수 있습니다.