2016-07-31 40 views
-1

Zum Beispiel mit der folgenden Hauptmethode.Wie überprüfe ich die kommende Ausgabe von der Hauptmethode?

public class Solution { 
    public static void main(String []argv) { 
     System.out.println("Hello World."); 
     System.out.println("Hello Java."); 
    } 
} 

Ich möchte wissen, wie Code eine Plattform (Hackerrank zum Beispiel) überprüfen würde, dass die Hauptmethode die erwartete Ausgabe druckt.

Ist nicht einfach vorstellen, wie man es mit Junit macht, auf den ersten Blick. Ich glaube, dass ein externes Programm die Ausgabe prüft, meine ich so etwas wie diese:

$ java Solution | runtests 

Danke

Antwort

3

Ihre Vermutung Unix-Rohr-Futter verwendet, ist sicherlich eine Möglichkeit, dass es getan werden könnte.

In Java, können Sie es tun, indem Sie den java Befehl ausführen und die Ausgabe über einen InputStream

// Create and start the process 
Process pb = new ProcessBuilder("java", "Solution").start(); 
// Create a reader to read in each output line 
BufferedReader reader = new BufferedReader(new InputStreamReader(pb.getInputStream())); 
String line; 
// Read in line by line 
while((line = reader.readLine()) != null) { 
    // ... 
} 

Hinweis zu lesen, dass die start() Methode der ProcessBuilder einen IOException werfen kann, so dass Sie für dieses Konto müssen .

+0

Ich habe mir auch überlegt, einen 'ProcessBuilder' zu verwenden, aber eigentlich zum Aufruf von Java-Code ist der beste Weg, ihn direkt aufzurufen, oder? – Dici

+0

@Dici Ja, es direkt anzurufen ist wahrscheinlich der beste Weg, solange Sie sich nicht sorgen, dass der geschriebene Code den Code, der ihn ausführt, beeinträchtigt (Code, der durch einen separaten Prozess läuft, wird in seiner eigenen Umgebung sein). – SamTebbs33

+1

Ja, Ihre Lösung würde eine neue JVM umfassen. Das könnte eine gute Sache für Isolationszwecke sein, aber ich frage mich, ob es nachhaltig für einen Server ist, der viele Lösungen zur Bewertung erhalten würde. Vielleicht ist es in Ordnung, vielleicht auch nicht, obwohl ich sehen kann, warum zwei Lösungen, die auf der gleichen JVM laufen, ziemlich schlecht sein können ... +1 – Dici