Vorrei simulare l'input da tastiera in un test JUnit4
Nel main viene fatta una richiesta e viene aperto uno stream in input così(da manuale insomma):
BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
e si aspetta inizialmente un input, poi degli altri.
Ho pensato che facendo partire un Thread, all'interno del test, che invia sullo standard output delle stringhe, sarebbe andato bene; invece no
Il test sarebbe questo:
@Test
public final void startNewConsoleGame() {
ExecutorService executor = Executors.newCachedThreadPool();
//BufferedWriter br=new BufferedWriter(new OutputStreamWriter(System.out));
String[] c= {"0\r\n","0\n","1\n","1\n","0\n","1\n","1\n"};
Thread t=new Thread(){
int i=0;
@Override
public void run(){
while(i!=c.length) {
try {
sleep(500);
System.out.print(c[i]);
System.out.flush();
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
try {
executor.execute(t);
Main.main(null);
} catch (IOException e) {
e.printStackTrace();
}
AtomicInteger m=new AtomicInteger(0);
Coordinator.getInstance().getPlayers().entrySet().stream().forEach(player->{
assertEquals(0, player.getValue().showCardsInHand().showDeck().size());
int i3=player.getValue().showCardsInHand().showDeck().size();
int i5=player.getValue().showMyResult().showDeck().size();
m.addAndGet((i3+i5));
});
int i1=Dealer.getInstance().getDeck().showDeck().size();
int i2=Dealer.getInstance().getCardTable().showDeck().size();
assertEquals(40, (i1+i2+m.get()));
}
Il test di per se, ora, non è importante, la cosa importante è il thread; secondo voi dove sbaglio?