2014-05-10 3 views
0

Je suis très nouveau à junit mockito et en essayant d'écrire le cas de test junit en utilisant mockito.JUnit cas de test en utilisant mockito

Voici ma méthode pour laquelle je dois écrire un junit.

public String getAllCookBooks(ChefService chefService, ChefApi chefApi) { 
    JSONObject cookBooks = null; 
    cookBooks = new JSONObject(); 
    JSONArray array = null; 
    array = new JSONArray(); 

    try { 
     if (null != chefService.listCookbookVersions()) { 
      LOG.debug(SuccessCode.COOKBOOK_DETAILS_RETRIEVED_SUCCCESS 
        .getSuccessCode() 
        + "::" 
        + SuccessCode.COOKBOOK_DETAILS_RETRIEVED_SUCCCESS 
          .getMessage()); 
      for (CookbookVersion cookbookVersion : chefService 
        .listCookbookVersions()) { 

       JSONObject cookBooksDetails = new JSONObject(); 

       cookBooksDetails.put("cookbook_name", 
         cookbookVersion.getCookbookName()); 
       cookBooksDetails.put("cookbook_version", 
         cookbookVersion.getVersion()); 

       cookBooksDetails.put("name", cookbookVersion.getName()); 
       array.put(cookBooksDetails); 
      } 
     } else { 
      LOG.info("no cookbook present..." 
        + ErrorCode.COOKBOOK_LIST_EMPTY_ERROR.getErrorCode() 
        + " : " 
        + ErrorCode.COOKBOOK_LIST_EMPTY_ERROR.getMessage()); 
      cookBooks.put("error", 
        ErrorCode.COOKBOOK_LIST_EMPTY_ERROR.getMessage()); 
     } 
     cookBooks.put("chef_cookbooks", array); 
    } catch (JSONException e) { 
     LOG.warn("JSON Exception " 
       + ErrorCode.JSON_PARSE_ERROR.getErrorCode() + " " 
       + ErrorCode.JSON_PARSE_ERROR.getMessage()); 
    } 

    LOG.debug("cookbooks: " + cookBooks.toString()); 
    LOG.info("Ended getAllCookBooks method"); 
    return cookBooks.toString(); 
} 

Les arguments de méthode passés ChefService et ChefApi sont de 3rdparty api

ici l'appel chefService.listCookbookVersions() retournera un itérateur de type classe CookBookVersion comme Iterable<? extends CookbookVersion> Je ne reçois pas comment passer l'objet simulé ChefService en la méthode qui retournera une valeur à comparer.

Aidez-nous s'il vous plaît.

+0

Vous n'êtes pas en utilisant le paramètre 'chefApi', ce qui rend l'écriture de votre maquette facile (vous avez qu'une seule chose à se moquer), mais fait votre code est mauvais (vous n'utilisez pas tous vos paramètres, alors pourquoi est-il là pour commencer?) – Makoto

+0

Je ne comprends pas la question Avez-vous essayé d'écrire votre test JUnit? Ce qui n'a pas fonctionné pour vous? –

Répondre

0

Vous ne transmettez rien. Vous dites explicitement au cadre que, lorsque cet appel particulier est appelé, renvoyez quelque chose.

ChefService chefServiceMock = mock(ChefService.class); 
// some reasonable, expected entry value 
List<CookbookVersion> cookbookVersions = ...; 
when(chefServiceMock.listCookbookVersions()).thenReturn(cookbookVersions); 
// You're not actually using the API object, so you can pass in null. 
// It'd be wiser to remove it altogether. 
String actual = testObject.getAllCookBooks(chefServiceMock, null); 

Lorsque vous avez terminé, vous devrez vous assurer qu'il a été appelé, de sorte que vous voulez verify l'appel.

// later 
verify(chefServiceMock).listCookbookVersions(); 

Ensuite, assurez-vous que vous vérifiez le résultat réel. J'ai vu des tests qui ne font que valider que les simulacres fonctionnent, mais les données qui étaient réellement générées étaient des ordures.

Assurez-vous que c'est aussi de données que vous attendez recevoir de votre liste d'entrées de l'API.

+0

@ Makato- Merci pour la réponse, la méthode ne devrait pas avoir inutilisé param comme vous l'avez dit, va supprimer cela.Le problème ici est que je ne suis pas capable de créer un valeur factice ici pour comparer avec Mockito.when(). Like List cookbookVersions = ... – bagui

0

Qu'est-ce que vous avez à faire (le plus probable) est:

ChefService chefService = mock(ChefService.class); // create the mock 
when(chefService.listCookbookVersions()).thenReturn(aListOfValues); // establish what would be returned on method call, in this case 'aListOfValues' 

// you could do the same for chefApi 

String result = getAllCookbooks(chefService, chefApi); // call you method 

//assert something on the result 
+0

Le problème ici est que je ne suis pas en mesure de créer une valeur à comparer. Ici, quand (chefService.listCookbookVersions()). ThenReturn (aListOfValues); Je ne suis pas capable de créer une valeur fictive à transmettre. pour obtenir la valeur, nous devons appeler une tierce partie pour retourner une liste . Comment puis-je créer une valeur fictive ici ... une suggestion? – bagui

+0

Dans l'exemple que je vous ai donné, la valeur factice serait 'aListOfValues', que vous devez fournir (une valeur contrôlée) –

Questions connexes