Vous pouvez railler le InputStream en utilisant quelque chose comme Mockito. Mais cela peut aussi être fait sans cela. En utilisant System.setIn()
vous pouvez changer le flux que retournera System.in
.
public class ReaderTest {
@Test
public void test() throws IOException {
String example = "some input line"; //the line we will try to read
InputStream stream = new ByteArrayInputStream((example+"\n").getBytes(StandardCharsets.UTF_8)); //this stream will output the example string
InputStream stdin = System.in; //save the standard in to restore it later
System.setIn(stream); //set the standard in to the mocked stream
assertEquals(example, Reader.readLine()); //check if the method works
System.setIn(stdin);//restore the stardard in
}
}
class Reader{
public static String readLine() throws IOException{
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
return stdin.readLine();
}
}
Un autre avantage de se moquant du flux est que vous ne devez pas entrer dans la chaîne plus chaque fois que vous voulez exécuter le test.
Notez également que la restauration System.in
peut être effectuée dans une méthode avant et après si vous envisagez de le faire beaucoup.
Les tests unitaires sont des tests automatisés et reproductibles pour une rétroaction rapide. Pourquoi voulez-vous les ignorer en saisissant les commentaires des utilisateurs, mieux les créer ou les utiliser, ou si vous le voulez vraiment être externe, utiliser du csv, type de fichier de propriété –
Copie possible de [Applications/programmes basés sur la console de test - Java] (https://stackoverflow.com/questions/4230402/testing-console-based-applications-programs- java) –