J'ai une méthode qui lit les lignes de l'entrée standard et écrit des lignes sur la sortie standard. Dans un test JUnit, comment puis-je envoyer une entrée à la méthode et comment puis-je capturer sa sortie afin de pouvoir faire des assertions sur elle?Test d'une méthode qui lit des entrées et sorties standard vers la sortie standard
3
A
Répondre
16
Vous ne devriez pas avoir une méthode qui lit à partir de l'entrée standard et écrit sur la sortie standard.
Vous devez avoir une méthode qui accepte comme paramètres le InputStream
à partir duquel il lit et le PrintStream
dans lequel il écrit. (Ceci est une application, au niveau de la méthode, d'un principe connu sous le nom Dependency Injection (Wikipedia) qui est généralement utilisé au niveau de la classe.)
Ensuite, dans des circonstances normales, vous invoquez cette méthode faisant passer System.in
et System.out
en tant que paramètres. Mais quand vous voulez le tester, vous pouvez lui passer un InputStream
et un PrintStream
que vous avez créé à des fins de test.
Ainsi, vous pouvez utiliser quelque chose le long de ces lignes:
void testMyAwesomeMethod(String testInput, String expectedOutput)
{
byte[] bytes = testInput.getBytes(StandardCharsets.UTF_8);
InputStream inputStream = new ByteArrayInputStream(bytes);
StringWriter stringWriter = new StringWriter();
try(PrintWriter printWriter = new PrintWriter(stringWriter))
{
myAwesomeMethod(inputStream, printWriter);
}
String result = stringWriter.toString();
assert result.equals(expectedOutput);
}
http://programmers.stackexchange.com/a/212360/31260 – gnat