2015-03-24 1 views

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