Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #12857

System.setIn + zwei Scanner auf ByteArrayInputStream

From Robert Hartmann <Robert_Hartmann@gmx.net>
Newsgroups de.comp.lang.java
Subject System.setIn + zwei Scanner auf ByteArrayInputStream
Date 2015-11-06 21:13 +0100
Organization Aioe.org NNTP Server
Message-ID <n1j1k4$acb$1@speranza.aioe.org> (permalink)

Show all headers | View raw


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();
   }
}

Back to de.comp.lang.java | Previous | NextNext in thread | Find similar


Thread

System.setIn + zwei Scanner auf ByteArrayInputStream Robert Hartmann <Robert_Hartmann@gmx.net> - 2015-11-06 21:13 +0100
  Re: System.setIn + zwei Scanner auf ByteArrayInputStream Robert Hartmann <Robert_Hartmann@gmx.net> - 2015-11-09 19:07 +0100

csiph-web