Hallo,
hänge gerade an einem Problem fest...habe folgende Klasse....zu der ich einen Unit Test schreibe...
und der Unit Test (TestNG) sieht derzeit so aus:
so nun zu meinem Problem:
In der Method testApp (Unit Test) möchte ich einen String einlesen mit einem Problem. Das Problem dabei ist, dass mithilfe des Unit Tests prüfen möchte, ob meine Routine (readString) so läuft wie sie soll....
Dazu muss ich Daten auf den stdin schreiben (nämlich das was der Benutzer üblicherweise eintippen würde) und auf dem stdout das Ergebnis lesen...
Um nun den stdin umzuleiten (redirect) habe ich per System.setIn(...) einen Stream angegeben...Das Problem dabei ist aber, dass das ein InputStream ist und ich somit auf dem nicht schreiben kann....eventuell habe ich gerade nur ein Dickes Brett vor dem Kopf....
Hat da einer eine Idee oder Vorschlag ?
Gruß
Karl Heinz Marbaise
hänge gerade an einem Problem fest...habe folgende Klasse....zu der ich einen Unit Test schreibe...
Java:
public class Interactive {
private static Logger LOGGER = Logger.getLogger(Interactive.class);
public static String readString(String prompt) {
System.out.println(prompt + ": ");
return readLine();
}
public static boolean readYesNo(String prompt) {
String result = readString(prompt);
if (result.trim().toLowerCase().startsWith("y")) {
return true;
} else {
return false;
}
}
public static String readPassword(String prompt) {
String result = null;
Console cons = System.console();
char[] passwd;
if (cons == null) {
LOGGER.error("Console is null!");
} else {
passwd = cons.readPassword("%s: ", prompt);
// HINT: Security flaw...Not filling up the password it would in
// memory over the runtime.
// java.util.Arrays.fill(passwd, ' ');
result = passwd.toString();
}
return result;
}
public static String readLine() {
String strInput = null;
try {
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
strInput = input.readLine();
input.close();
} catch (Exception e) {
LOGGER.error("Failure during console input:", e);
}
return strInput;
}
}
Java:
@BeforeMethod
public void beforeMethod() {
LOGGER.info("beforeMethod()");
out = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(out);
StringWriter sw = new StringWriter();
System.setOut(ps);
System.setIn(in);
}
@AfterMethod
public void afterMethod() {
System.setOut(System.out);
System.setIn(System.in);
}
@Test
public void testApp() {
Interactive ia = new Interactive();
String result = ia.readString("This is a Test");
Assert.assertEquals("Test Input", result);
}
In der Method testApp (Unit Test) möchte ich einen String einlesen mit einem Problem. Das Problem dabei ist, dass mithilfe des Unit Tests prüfen möchte, ob meine Routine (readString) so läuft wie sie soll....
Dazu muss ich Daten auf den stdin schreiben (nämlich das was der Benutzer üblicherweise eintippen würde) und auf dem stdout das Ergebnis lesen...
Um nun den stdin umzuleiten (redirect) habe ich per System.setIn(...) einen Stream angegeben...Das Problem dabei ist aber, dass das ein InputStream ist und ich somit auf dem nicht schreiben kann....eventuell habe ich gerade nur ein Dickes Brett vor dem Kopf....
Hat da einer eine Idee oder Vorschlag ?
Gruß
Karl Heinz Marbaise