2017-12-22 19 views
0

Ich möchte UNIT Test mit SOAP Webservices schreiben. Webservices arbeiten in einer anderen JAR-Datei, die ich versuche Runtime.getRuntime() .exec (// java - jar ...) zu laden. Das Laden der JAR-Datei dauert 2 Minuten. Wenn der Ladevorgang im neuen Thread ist, endet der Test, bevor das Laden der JAR-Datei beendet wird. Wenn das Laden im Haupt-Thread ist, ist der Test nicht beendet. Ich versuche die HTTP-Antwort während des Zyklus zu hören, aber wenn der Zyklus funktioniert, wird die JAR-Datei nicht geladen.Start test body nach JAR-Datei laden (von JAVA) ist fertig

@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

Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines [mcve]. Nutze den Link [Bearbeiten], um deine * Frage * zu verbessern - füge keine weiteren Informationen über Kommentare hinzu. Vielen Dank! – GhostCat

+0

Ich verstehe deine Frage wirklich nicht. Beschreiben Sie genau, was Sie erwarten und was tatsächlich passiert. Darüber hinaus: Nennen Sie nicht einen ** Unit ** -Test, wenn Sie tatsächlich einen vollen Funktionstest durchführen. Ein Unit Test macht Dinge isoliert. Ein Test, bei dem der Web-Service gestartet und ausgeführt werden muss, ist KEIN Unit-Test. – GhostCat

Antwort

0

OK. Ich möchte einen Test schreiben, der die Webservices aus der JAR-Datei startet (Ladevorgang dauert 1,5 Minuten) und dann den Test ausführen. Um Web-Dienste zu starten, benutze ich Runtime.getRuntime(). Exec und um zu verstehen, dass sie gestartet haben, verwende ich HTTP-Antwort-Code. Wenn der Code [200-400], bedeutet dies, dass die WS OK gestartet wurde.

Ich habe versucht, Code in neuen Thread zu debuggen und Code mit InputStreamReader und während des Zyklus hinzugefügt.

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

Und Test erfolgreich ausgeführt. Als ich den while-Zyklus mit readline entfernte, hatte sich das Problem wiederholt. Ich habe noch nicht verstanden, warum es funktioniert hat.

Verwandte Themen