web-dev-qa-db-fra.com

Comment tester la méthode void avec les outils de test Junit?

Il m'est juste arrivé d'implémenter une méthode void followlink(obj page,obj link) qui ajoute simplement une page et un lien à la file d'attente. J'ai essayé en vain de tester ce type de méthode. 

Tout ce que je veux, c'est tester que dans la file d'attente contient la page et le lien reçus de la méthode followlink. Ma classe de test étend déjà TestCase. Alors, quel est le meilleur moyen de tester une telle méthode? 

27
user152462

JUnit FAQ contient une section sur les méthodes de test qui renvoient void. Dans votre cas, vous souhaitez tester un effet secondaire de la méthode appelée.

L'exemple donné dans la FAQ teste que la taille d'une Collection change après l'ajout d'un élément.

@Test
public void testCollectionAdd() {
    Collection collection = new ArrayList();
    assertEquals(0, collection.size());
    collection.add("itemA");
    assertEquals(1, collection.size());
    collection.add("itemB");
    assertEquals(2, collection.size());
}
42
Bill the Lizard

Vous pouvez tester la taille de la file d'attente avant et après l'appel de votre méthode, par exemple:

int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?

une autre chose que vous pourriez faire est de commencer avec une file vide, appelez followLink, puis retirez le premier élément de la file d'attente et testez ses valeurs.

15
Patrick McDonald

Très probablement, votre file d'attente est private , donc vérifier la taille ne va pas fonctionner. La solution de «conception pour les tests» que j’ai vue consiste à utiliser plutôt le module package private et les membres. Étant donné que vos tests Junit sont susceptibles de figurer dans le même package, ils y auront accès. 

Cela, en soi, permet au test d'effet secondaire " queue.length () " de fonctionner.

Mais je voudrais aller plus loin: vous devriez vraiment vérifier que votre méthode a inséré la page correct / et un lien vers votre file d'attente. Les détails de cette opération nécessitent davantage de connaissances sur la manière dont vous représentez (et combinez) la page et le lien.

La solution jMock est également très bonne, même si, en réalité, je suis beaucoup plus habitué à écrire mes propres harnais de test.

3
CPerkins

Utilisez la bibliothèque jMock et mock un storage qui contient votre file d'attente, jMock permet de vérifier si la méthode mocked a été appelée et avec quels paramètres.

0
Chris Ciesielski

So - Vérifiez après l'appel de la méthode la file d'attente si les valeurs transmises à la méthode sont ajoutées à la file d'attente. Pour cela, vous devez avoir accès à la file d'attente (quelque chose comme getQueue ()).

0
Mnementh

Nous avons deux moyens de vérifier les éléments suivants:

  1. Vérifiez en utilisant la taille de la file d'attente/de la collection comme indiqué dans le programme ci-dessous: (Comme l'a souligné Patrick)

    @Test
    public void testfollowlinkAdd() {
      int size = queue.length();
      queue.add(pageLink);   //Considering an Object of PageLink
      Assert.assertTrue(size+1, queue.length());
    }
    

OR

  1. Faire usage de MockObjects. Des cadres comme Mockito peuvent être utiles ici.
0
subodhkarwa