2017-12-22 18 views
0

SOAP WebサービスでUNITテストを作成します。 Webサービスは他のjarファイルで動作し、Runtime.getRuntime()。exec(// java-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

私は本当にあなたの質問を理解していない。起こると予想されること、そして実際に起こることを慎重に記述します。それを超えて:実際に完全な機能テストを行うときは、**ユニット**のテストを呼び出さないでください。ユニットテストは物事を孤立して行います。 Webサービスの起動と実行を必要とするテストは単体テストではありません。 – GhostCat

答えて

0

OK。私はjarファイル(ロードプロセスは1.5分かかる)からwebservicesを開始し、テストを実行するテストを書くしたい。 Webサービスを開始するには、Runtime.getRuntime()。execを使用し、HTTP応答コードを使用して開始したことを理解してください。コード[200-400]は、wsがOKを開始したことを意味します。

新しいスレッド内でコードをデバッグしようとしましたが、InputStreamReaderとwhileサイクルでコードを追加しようとしました。

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サイクルを削除したとき、問題は繰り返されました。 私はそれがなぜ働いたのかまだ分かりません。

関連する問題