JUnit 4 User Interaktion

Status
Nicht offen für weitere Antworten.
Hi!
Ich frage mich ob es möglich ist einfache Programme die in der main-Methode laufen auch per UnitTests zu überprüfen.
Beispielsweise (ja, das ist ein sehr einfaches Beispiel) sollen Zufallszahlen generiert werden. Dazu soll der User eine Ober- und eine Unterschranke auf der Konsole eingeben. Eine Zufallszahl in dem Bereich wird generiert und auf der Konsole wieder ausgegeben. Überprüft soll werden, ob diese Zahl beispielsweise wirklich innerhalb er Schranken liegt.

Dabei ist es mir nicht wichtig dass da wirklich ein User vor sitzt, viel interessanter wäre es wenn ich das Automatisieren könnte, den User also simuliere, wie er immer mal wieder (aber endlich oft) zwei Zahlen eingibt und deren von JunitTests überprüftes Ergebnis auf der Konsole ausgibt.
Dabei wäre dann auch die Konsolenausgabe egal :)

Hauptsächlich frage ich mich ob ich das mit JUnit hinbekomme Eingaben so zu generieren dass sie verwendet werden, als würden sie über die Konsole eingelesen.

Oh Mann - echt schwer zu beschreiben :)
 
Hm, vielleicht zu umständlich beschrieben?
Nochmal vielleicht etwas anders:

Gegeben ein Programm X dass meinetwegen 2x von der Konsole Usereingaben einliest... - Kann man dieses Programm mit Unit-Tests testen und die Eingaben des Users simulieren? Wenn ja, wie?

Oder wisst ihr wo ich sonst fragen könnte?

Der Christian...
 

HoaX

Top Contributor
wenn dein progamm richtig aufgebaut ist hast du irgendwo eine funktion wie
Code:
int generiereZufallszahl(int min, int max)

die kannst du eifach vom test aus entsprechend aufrufen
 
Wenn ich aber ne Funktion habe:

Code:
...palaber bla blubb...

public int funktionZufallsZahl(){
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String text = in.readLine();
    int min = Integer.parseInt(text);
    int max = Integer.parseInt(in.readLine());

   return min + (Math.random()*(max-min));
}

Wie simuliere ich da die Konsoleneingaben - denn die Funktion terminiert ja nicht, wenn nicht 2x von der Konsole gelesen wird.
 

Murray

Top Contributor
Eigentlich wäre es besser, die Eingabe von der Berechnung zu trennen (wie von Hoax beschrieben). Dann könnte der Test-Case die "Konsoleneingabe" insofern simulieren, als dass er einfach in einer Schleife immer zwei (zufällige) Werte vorgibt. Wenn es dir aber gerade um den Test der Eingabe geht, könntest du deiner Methode den InputStream als Parameter übergeben. Im Normalbetrieb wird dann System.in übergeben, beim Testen kann der Test-Case dann z.B. einen FileInputStream oder einen ByteArrayInpoutStream mit simulieren Eingaben übergeben.
 
Danke für die Antwort!

Wenn ich dann den InputStream mit übergebe läuft es doch eigentlich auch wieder darauf hinaus dass die Funktion die aufgerufen und tetestet wird, Argumente mit übergeben bekommen muss, oder?
Also wäre das praktisch die Lösung von Hoax.

Klar, ich würde das auch so machen. Ich schreibe gerade ein System das Javaaufgaben mit Unit-Tests überprüft. Einige der Aufgaben erfordern halt Konsolen-User-Interaktion und ich hab mich gefragt ob man das mit Unit-Tests realisieren kann.
Ist ja nicht weiter schlimm wenn es nicht geht, schöner natürlich wenn doch :) aber so stellt man halt die Aufgabe ein wenig um.

Vielen Dank euch beiden!
Christian
 

Murray

Top Contributor
KoenigGunther hat gesagt.:
Wenn ich dann den InputStream mit übergebe läuft es doch eigentlich auch wieder darauf hinaus dass die Funktion die aufgerufen und tetestet wird, Argumente mit übergeben bekommen muss, oder?
Ja, die Sigantur der Methode müsste insofern geändert werden, als dass sie jetzt einen InputStream bekommt. Durch Überladen kann man es ja aber schaffen, dass das "normale" API weiterhin erhalten bleibt.
Code:
public int funktionZufallsZahl(){
   return funktionZufallsZahl( System.in);
}

public int funktionZufallsZahl( InputStream inp){
    BufferedReader in = new BufferedReader(new InputStreamReader( inp));
    String text = in.readLine();
    int min = Integer.parseInt(text);
    int max = Integer.parseInt(in.readLine());

   return min + (Math.random()*(max-min));
}

KoenigGunther hat gesagt.:
Also wäre das praktisch die Lösung von Hoax.
Nicht ganz. Grundsätzlich würde ich zwar auch dazu raten, die Methode wie von Hoax vorgeschlagen vom Einlesen der Parameter zu entkoppeln und nur die Berechnung für sich zu testen. Wenn du aber a) das API nicht ändern willst und/oder b) eben auch das Einlesen der Parameter testen willst, dann wäre der InputStream eine Lösung dafür, denn damit könntest du z.B. auch die Eingabe von Buchstaben simulieren und feststellen, dass der Code dann auf eine NumberformatException läuft.
 
Okay, das werd ich mir nochmal genau überlegen... Im Moment bin ich aber eher in der Stimmung die Aufgaben dahingehend zu ändern als dass man gefälligst eine Funktion mit Parametern schreiben soll :)
Danke sehr!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Junit Test Allgemeine Java-Themen 8
J Junit surefire: enrich test information Allgemeine Java-Themen 0
J Junit start surefire for manual testing Allgemeine Java-Themen 1
P No JUnit tests found Allgemeine Java-Themen 5
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
J JUnit - Auslassen von Code Allgemeine Java-Themen 25
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
K Input/Output JUnit: Log Inhalte, falsche Assertion Allgemeine Java-Themen 2
H OOP Testen einer Exception mit JUnit Allgemeine Java-Themen 8
AssELAss Junit-Tests für SQL-Veribindung sowie SQL-Queries? Allgemeine Java-Themen 3
O Maven - JUnit - H2 Allgemeine Java-Themen 1
M Selenium JUnit Tests (Auswahl von Testmethoden auswerten) Allgemeine Java-Themen 5
C JUNIT - ANT - build.xml Allgemeine Java-Themen 0
Airwolf89 JUnit: Vorschläge/ Best Practice Allgemeine Java-Themen 7
M JUnit Serverseitig? Wie geht sowas? Allgemeine Java-Themen 2
E JUnit wie Testergebnisse pro Test ("Test Report") erhalten? Allgemeine Java-Themen 1
B JUnit Zufalls Operation testen Allgemeine Java-Themen 1
P JUnit Allgemeine Java-Themen 2
B jUnit 4: Wie protokolliert man Testergebnisse? Allgemeine Java-Themen 1
H JUnit Fehler beim Compilieren - erledigt Allgemeine Java-Themen 0
M JUnit Test Suites Allgemeine Java-Themen 2
L JUnit - automatisiertes vs. manuelles Testen? Allgemeine Java-Themen 6
B Hilfe bei JUnit Test Allgemeine Java-Themen 1
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
A JUnit/Hashcode Problem Allgemeine Java-Themen 5
X Problem mit URLClassLoader und JUnit Allgemeine Java-Themen 3
N JUnit Allgemeine Java-Themen 13
M Junit Tests durchführen Allgemeine Java-Themen 18
M JVM Probleme JUnit Allgemeine Java-Themen 2
G NUnit Features in JUnit Allgemeine Java-Themen 2
darekkay (JUnit) Testdaten generieren - Framework? Allgemeine Java-Themen 2
A JUnit problem Allgemeine Java-Themen 9
T Organisation von Junit Testfällen? Allgemeine Java-Themen 2
M JUnit Tests vs. DBUnit Tests Allgemeine Java-Themen 3
P Klassen Junit test funktioniert nicht... Allgemeine Java-Themen 11
S Die Zeile die JUnit gerade ausführt lesen Allgemeine Java-Themen 15
aze JUnit: Testen ob bestimmte Exception nicht auftritt Allgemeine Java-Themen 18
U Fehler: Hauptklasse org.junit.runner.JUnitCore konnte nicht gefunden oder geladen werden Allgemeine Java-Themen 2
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
J JUnit-Tests Zeichensatzproblem ? Allgemeine Java-Themen 2
J JUnit, TestCase vs "einfacher" Test Allgemeine Java-Themen 3
S [JUnit] Name von TestCase bekommen Allgemeine Java-Themen 4
1 JUnit Test Suit Allgemeine Java-Themen 2
T Junit-Tests in Java Klasse ausführen Allgemeine Java-Themen 26
J JUnit - werfen von Exceptions testen Allgemeine Java-Themen 17
M JUnit TestSuite erstellen Allgemeine Java-Themen 2
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
G Testcases mit Junit auf private-Methode Allgemeine Java-Themen 7
G Input/Output System.in "umbiegen" für junit-Test Allgemeine Java-Themen 4
C JUnit und das Zulassen von RuntimeExceptions Allgemeine Java-Themen 5
ruutaiokwu junit mit annotations geht nicht? Allgemeine Java-Themen 5
T JUnit-Log auslesen Allgemeine Java-Themen 13
C JUnit Tests Allgemeine Java-Themen 4
fastjack JUnit Supplementary Classes Allgemeine Java-Themen 4
O Junit Reports / Logs als XML ohne Maven/Ant Allgemeine Java-Themen 7
M Junit und Mocks Allgemeine Java-Themen 5
fastjack jUnit und Test von equals, hashCode, toString Allgemeine Java-Themen 11
D junit - frage zu fixtures/test suites Allgemeine Java-Themen 11
A Seltsames Verhalten von JUnit-Tests im Zusammenspiel mit Ant Allgemeine Java-Themen 6
S JUnit: Erzeugen einer IOException Allgemeine Java-Themen 9
G JUnit Tests Allgemeine Java-Themen 7
G JUnit Test Allgemeine Java-Themen 5
S JUnit - was mocken, was nicht? Allgemeine Java-Themen 3
S JUnit TesSuite und @Repeat Allgemeine Java-Themen 2
S JUnit Tests für GUI / Oberflächen Allgemeine Java-Themen 2
M Junit und Mocks bei JDBC Daos Allgemeine Java-Themen 8
M JUnit Problem mit AssertionFailedError Allgemeine Java-Themen 2
B Testfälle mit JUnit Allgemeine Java-Themen 4
S JUnit Allgemeine Java-Themen 15
N ClassNotFound Exception bei JUnit Test? Allgemeine Java-Themen 2
G ANT Tutorial . Schritte bzgl. Junit Bibliothek Allgemeine Java-Themen 4
A JUnit Reports zu groß für XSLT Allgemeine Java-Themen 4
M JUnit und dynamische Tests Allgemeine Java-Themen 11
P JUnit unter Eclipse: Problem mit Exception Allgemeine Java-Themen 8
GilbertGrape Warum schlägt JUnit-Test fehl? Allgemeine Java-Themen 19
K Bekomme JUnit TEst nicht zum laufen :( Allgemeine Java-Themen 9
K Junit: Frage zum Ablauf Allgemeine Java-Themen 3
K JUnit: Tests über ant aufrufen Allgemeine Java-Themen 2
S JUnit und EasyMock Allgemeine Java-Themen 7
B Wie alt ist JUnit? Allgemeine Java-Themen 2
A Junit Exceptions testen Allgemeine Java-Themen 3
P Testen mit JUnit Allgemeine Java-Themen 8
7 JUnit: Testproblem. Allgemeine Java-Themen 23
G Ant + JUnit Allgemeine Java-Themen 2
F JUnit unter Ant Allgemeine Java-Themen 3
S Integer zu int konvertieren - JUnit Allgemeine Java-Themen 12
G testen mit JUnit? Allgemeine Java-Themen 3
M Ant + Junit + Testclass in Jar Allgemeine Java-Themen 3
G Junit 4 - TestSuite Allgemeine Java-Themen 6
B JUnit Allgemeine Java-Themen 2
T CheckStyle, JUnit und FindBugs aus Java-Programm starten Allgemeine Java-Themen 2
S JUnit will ins Netz! Allgemeine Java-Themen 2
B JUnit - Gleichen Test x-mal durchlaufen Allgemeine Java-Themen 2
F Hilfe: Adjazenzmatrix mittels JUnit testen. Allgemeine Java-Themen 2
H JUnit Allgemeine Java-Themen 5
N Problem mit Ant und JUnit Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben