1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
@Test
public void templateSearch() throws Exception {
System.out.println("-> test unitaire de la méthode <<< templateSearch() >>>\n");
//*****************************************
// GIVEN: quand la situation est comme ceci
//*****************************************
// (on configure le mock pour que lorsque l'on invoque readWithURL avec n'importe quel
// argument, il retourne 1 valeur cohérente, càd 1 responseEntity = type de retour de readWithURL()
// il faut donc déclarer un objet ResponseEntity
ResponseEntity mockResponseEntity = mock(ResponseEntity.class);
when(mockCCBRepos.readWithURL((ObjectRequest) any())).thenReturn(mockResponseEntity);
// ResponseEntity étant un mock, on pourrait aussi configurer certaines de ses methodes si besoin
// ie: vérifier comment réagit l'implém quand la réponse du service sous-jaçent est une erreur 400
//when(mockResponseEntity.getStatusCode()).thenReturn(HttpStatus.BAD_REQUEST);
//when(mockResponseEntity.getBody()).thenReturn("{\"reason\": \"blbabl\"}");
//when(mockResponseEntity.hasBody()).thenReturn(true);
//paramètre en INPUT de la méthode
CampagneCartouche or = new CampagneCartouche();
//**************************
// WHEN: et que je fais cela
//**************************
instance.templateSearch(or);
//**************************************************************************
// THEN: je m'attend à ce qu'il se passe ceci (tester le code de la méthode)
//**************************************************************************
// vérifier l'appel des 3 méthodes de la classe de base
// 1 LOGIN
verify(mockCCBRepos).requestLoging("https://xxxxxxxxxxxxx/qcbin/api/authentication/sign-in");
// 2 readWithURL
/******
Il y a 2 "new ObjectRequest" dans classe de base ET classe de test... donc 2 instances différentes, qui n'overrident pas equals.
Donc mockito dit "pas bon": argument(s) are different!
Il faut donc implémenter equals() et hashCode() dans la classe ObjectRequest
******/
String urlEnveloppe = "https://xxxxxxxxxxxxx/qcbin/rest/domains/dom_g/projects/greenwich_dev";
String folderReleaseCible = urlEnveloppe+"/"+ Models.RELEASEFOLDER+"s/134";
verify(mockCCBRepos).readWithURL(new ObjectRequest().setURLEntity(folderReleaseCible));
/*****
Dans verify, on peut passer ce qu'on veut, soit une instance hard-codée et dans ce cas là mockito va utiliser equals, soit un critère plus complexe avec argThat:
Mockito.verify(monmock).save(argThat(new CustomMatcher<MonObjet>("must have saved an " + MonObjet.class + " with the field pouet containing 3") {
@Override
public boolean matches(Object item) {
MonObjet o = (MonObjet) item;
return Objects.equals(3, o.getPouet());
}
}));
*****/
// 3 LOUGOUT
verify(mockCCBRepos).requestLoging("https://xxxxxxxxxxxxx/qcbin/api/authentication/sign-out");
// PLUS d'éventuels assert*() pertinents à faire
} |