2017-12-22 8 views
0

SOAP 웹 서비스로 UNIT 테스트를 작성하고 싶습니다. Webservices는 Runtime.getRuntime(). exec (// java-jar ...)를로드하려고 시도하는 다른 jar 파일에서 작동합니다. jar 파일 로딩하는 데 2 ​​분이 걸립니다. 로드가 새 스레드에있을 때로드 Jar 파일이 완료되기 전에 테스트가 종료됩니다. 로드가 주 스레드에 있으면 테스트가 완료되지 않습니다. 주기 동안 HTTP 응답을 수신하려고하지만 사이클이 작동하면 jar 파일이로드되지 않습니다.JAVA에서 jar 파일로드가 완료된 후 테스트 본문을 시작하십시오.

@Before 
    public void setUp() throws Exception { 
     // Get path of jar file 

     thread = new Thread() { 
      public void run() { 
       try { 
        Process process = Runtime.getRuntime().exec(path-to-java.exe -jar webservices.jar); 

        process.waitFor(); 

        process.destroy(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }; 

     thread.start(); 

     int responseCode; 
     do { 
      responseCode = getResponseCodeHTTP("http://localhost:8080/services"); 
     } while (responseCode < 200 || responseCode >= 400); 

     System.out.println("Web services have loaded"); 
    } 

     public int getResponseCodeHTTP(String urlToRead) throws IOException { 
     URL url = new URL(urlToRead); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     int result; 
     try { 
      conn.connect(); 
      result = conn.getResponseCode(); 
     } catch (ConnectException e){ 
      return 500; 
     } 
     return result; 
    } 
+0

디버깅 도움말 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, 특정 문제 또는 오류 및 질문 자체에서이를 재현하는 데 필요한 가장 짧은 코드가 포함되어야합니다. 분명한 문제 성명이없는 질문은 다른 독자에게 유용하지 않습니다. 참조 : [mcve]를 만드는 방법. * 편집 * 링크를 사용하여 * 질문을 개선하십시오. - 의견을 통해 더 많은 정보를 추가하지 마십시오. 감사! – GhostCat

+0

나는 정말로 당신의 질문을 이해하지 못합니다. 일어날 것으로 예상되는 것과 실제로 발생하는 것을 신중하게 설명하십시오. 그 외에도 ** 실제 기능 테스트를 수행 할 때 ** unit ** 테스트를 호출하지 마십시오. 단원 테스트는 격리 된 방식으로 작업을 수행합니다. 웹 서비스를 시작하고 실행해야하는 테스트는 단위 테스트가 아닙니다. – GhostCat

답변

0

확인. 나는 jar 파일에서 웹 서비스를 시작할 테스트를 작성하고 (로딩 프로세스는 1.5 분 걸린다) 테스트를 실행한다. 웹 서비스를 시작하기 위해 Runtime.getRuntime(). exec를 사용하고 HTTP 응답 코드를 사용하여 시작했음을 이해합니다. 코드 [200-400]는 ws가 OK를 시작했음을 의미합니다.

새로운 스레드 내부에서 코드를 디버그하고 InputStreamReader와 함께 코드를 추가하려고 시도했습니다.

String line; 
InputStream stdout = process.getInputStream(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(stdout)); 
while ((line = reader.readLine()) != null) 
    System.out.println("[Stdout] " + line); 

테스트가 성공적으로 수행되었습니다. readline을 사용하여 while 사이클을 제거했을 때 문제가 반복되었습니다. 나는 그것이 왜 효과가 있었는지 아직 이해하지 못했다.

관련 문제