2017-06-10 2 views
0

Je crée JUnit et tester la méthode ci-dessous:obtenir des commentaires à l'avance test JUnit

public static String readLine() throws IOException{ 

    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); 
    return stdin.readLine(); 
} 

Je veux faire de la chaîne d'entrée dans la méthode de test JUnit à l'avance, pas readLine() en obtenant inputput dans la console par moi-même.

Comment puis-je faire cela?

+0

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é –

+1

Copie possible de [Applications/programmes basés sur la console de test - Java] (https://stackoverflow.com/questions/4230402/testing-console-based-applications-programs- java) –

Répondre

0

Moquez la classe, puis utilisez quand et ensuite Retournez l'entrée au lieu de la retirer de la console.

Un exemple du même est donné ci-dessous,

@Test 
    public void readLine() throws Exception { 
     BufferedReader bufferedReader = org.mockito.Mockito.mock(BufferedReader.class); 
     Mockito.when(bufferedReader.readLine()).thenReturn("line1", "line2", "line3"); 
    } 
+0

L'OP veut tester sa méthode, cela ne semble pas vraiment utiliser la méthode. –

1

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.