2017-10-12 1 views
0

écrit dans ma classeJunit @ Méthode d'essai, entrée donnant à la méthode d'exécution

public static Advertisement[] createAd() throws IOException 
{ 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 

    Advertisement[] ad = new Advertisement[5]; 
    int count =0; 
    char ch; 
    do 
    { 
    System.out.println("Enter advertisement id:"); 
    int id=Integer.parseInt(br.readLine()); 
    System.out.println("Enter advertisement type:"); 
    String type=br.readLine(); 
    ad[count]= new Advertisement(id, type); 
    count++; 
    System.out.println("Do you want publish another advertisement(Y/N):"); 
    ch = br.readLine().charAt(0); 

    if((ch!='y')&&(ch!='Y')) 
    { 
     break; 
    } 

    }while(count<=5); 
    if(count==5) 
    { 
     System.out.println("Maximum ads reached"); 
     return ad; 
    } 
    return ad; 
} 


Juint @Test method 
@Test 
public void testCreateAd() throws IOException 
{ 
    Advertisement[] a = Advertisement.createAd(); 
    assertTrue("Maximum five ads only should be created",(a.length<=5)); 
} 

Je veux vérifier, méthode createAd doit retourner maximum de 5 objet de la publicité de type. Mais quand la méthode @Test est en cours d'exécution, il est possible de passer l'entrée à la méthode readLine par le biais de laquelle

+0

La chose à regarder: https://stackoverflow.com/a/6416591/1531124. La chose est: vous * pouvez * tester le code qui lit à partir de System.in en utilisant quelques astuces. Mais: vous ne devriez pas le faire. Vous cachez * complètement le fait que votre code lit normalement depuis stdin depuis votre code de production. Alors que cela fonctionne avec * tout * type d'entrée. – GhostCat

Répondre

0

Je pense que vous devez mocker le lecteur tamponné. vous pouvez le transmettre en tant que paramètre de méthode (ou créer une autre méthode qui l'acceptent comme paramètre, et Mock ensuite dans votre code de test. allez voir this.

+0

Merci beaucoup. –

+0

cela signifie-t-il que vous avez résolu? Si oui, veuillez écrire la solution, ou marquer la bonne réponse comme solution, pour les utilisateurs suivants. – marco

0

BufferedReader doit être membre de la classe private. Si vous Pour ce faire, vous pouvez @Mock ce membre en vous TestClass et vous pouvez contrôler chaque appel et les valeurs de retour.

@Mock 
private BufferedReader bufferedReaderMock; 

Mockito.doReturn("some input").when(bufferedReaderMock).readLine(); 

maintenant, vous pouvez contrôler et simuler des valeurs saisi par l'utilisateur. peut-être de ne pas oublier cela avant Yoz're affirmant:

Mockito.verify(bufferedReaderMock).readLine(); // Verify it was called 
Mockito.verifyNoMoreInteractions(<all mocks)); // verify no other dependency class/member was called. 
+0

Merci beaucoup –

+0

Est-ce que cela fonctionne pour vous? – LenglBoy

+0

oui .. J'ai utilisé un autre moyen pour obtenir la même chose .. –