Robert Hartmann
2015-11-06 20:13:35 UTC
Hallo zusammen,
Unabhängig von der grundsätzlichen Frage,
ob man zwei verschiedene java.util.Scanner-Instanzen
auf System.in überhaupt "los lassen" können sollte,
stellt sich mir nun die tatsächlich praktische Frage:
Warum erhält im unteren Beispiel, die zweite
Scanner-Instanz nicht den Teil "Welt" ?
Wenn ich System.in per System.setIn auf
den ByteArrayInputStream umbiege?
Aufschließende Frage:
Wenn ich ein Modul-Teste (per JUnit4),
und dieses Modul nutzt den Scanner,
wie kann ich System.in so umbiegen,
dass eine beliebige Anzahl von Instanzen des Scanners
die vorgegebenen Testeingaben zu Gesicht bekommt?
Konkreter:
Es soll also für den Test kein Unterschied machen,
ob im zu testenden Modul
Scanner sc = new Scanner(System.in);
String A=sc.next(); String B=sc.next()
oder
Scanner scA = new Scanner(System.in);
Scanner scB = new Scanner(System.in);
String A=scA.next(); String B=scB.next()
steht.
Ich wünsche ein schönes Wochenende,
Gruß Robert
/******** 8< ****************/
import java.io.ByteArrayInputStream;
import java.util.Scanner;
public class SystemInTest {
public static void main(String[] args) {
ByteArrayInputStream inbuf
= new ByteArrayInputStream("Hallo\nWelt\n".getBytes());
System.setIn(inbuf);
Scanner sc1 = new Scanner(System.in);
String s1 = sc1.next();
if (sc1.hasNext()){
System.out.println("sc1: found next okay, open new Scanner:");
Scanner sc2 = new Scanner(System.in);
if (sc2.hasNext()){
String s2 = sc2.next();
System.out.println("S2= "+s2);
} else {
System.err.println("sc2 no next");
}
sc2.close();
}
System.out.println("S1= "+s1);
sc1.close();
}
}
Unabhängig von der grundsätzlichen Frage,
ob man zwei verschiedene java.util.Scanner-Instanzen
auf System.in überhaupt "los lassen" können sollte,
stellt sich mir nun die tatsächlich praktische Frage:
Warum erhält im unteren Beispiel, die zweite
Scanner-Instanz nicht den Teil "Welt" ?
Wenn ich System.in per System.setIn auf
den ByteArrayInputStream umbiege?
Aufschließende Frage:
Wenn ich ein Modul-Teste (per JUnit4),
und dieses Modul nutzt den Scanner,
wie kann ich System.in so umbiegen,
dass eine beliebige Anzahl von Instanzen des Scanners
die vorgegebenen Testeingaben zu Gesicht bekommt?
Konkreter:
Es soll also für den Test kein Unterschied machen,
ob im zu testenden Modul
Scanner sc = new Scanner(System.in);
String A=sc.next(); String B=sc.next()
oder
Scanner scA = new Scanner(System.in);
Scanner scB = new Scanner(System.in);
String A=scA.next(); String B=scB.next()
steht.
Ich wünsche ein schönes Wochenende,
Gruß Robert
/******** 8< ****************/
import java.io.ByteArrayInputStream;
import java.util.Scanner;
public class SystemInTest {
public static void main(String[] args) {
ByteArrayInputStream inbuf
= new ByteArrayInputStream("Hallo\nWelt\n".getBytes());
System.setIn(inbuf);
Scanner sc1 = new Scanner(System.in);
String s1 = sc1.next();
if (sc1.hasNext()){
System.out.println("sc1: found next okay, open new Scanner:");
Scanner sc2 = new Scanner(System.in);
if (sc2.hasNext()){
String s2 = sc2.next();
System.out.println("S2= "+s2);
} else {
System.err.println("sc2 no next");
}
sc2.close();
}
System.out.println("S1= "+s1);
sc1.close();
}
}