J'utilise @RunWith(SpringRunner.class)
pour écrire un scénario de test unitaire pour simuler l'objet. J'essaie de simuler l'instance du référentiel qui accepte l'objet de la requête et renvoie la réponse, mais dans l'implémentation du scénario de test unitaire, j'ai simulé le référentiel à l'aide de l'objet @MockBean
et enregistrer l'appel de sa méthode à l'aide de l'annotation Mockito.when(respository.post(request)).thenReturn(response)
. Mais cet appel renvoie null
.
Réponses
Trop de publicités?J'ai compris. Mais la solution me paraît toujours bizarre...
J'ai été confronté à ce problème parce que j'ai instancié l'application request
et response
en @Before
méthode annotée... comme décrite ci-dessous.
@Before
public void setup() {
Request reqA = new Request();
reqA.set..(..);
Response res = new Response();
res.set..(..);
Mockito.when(this.respository.post(reqA)).thenReturn(res);
}
@Test
public void test() {
// Creating Request instance again with all same properties.
// Such that this req instance is technically similarly as instantiated in @Before annotated method (above).
// By, implementing the equals and hashCode method.
Request reqB = new Request();
reqB.set..(..);
// Getting res as 'null' here....
Response res = this.service.post(reqB);
}
Depuis, reqA
et reqB
sont techniquement similaires, alors pourquoi l'appel simulé ne renvoie pas la même réponse que l'appel enregistré.
Si j'ai déménagé setup()
code de la méthode à l'intérieur test()
méthode tout commence à fonctionner ! !!!!
J'ai été confronté à une situation similaire, le problème est donné par le paramètre en Mockito.when()
Le bloc peut ne pas être le même que celui généré par le printemps. Je vais expliquer mon cas ci-dessous, en espérant vous aider :
Product product = new Product(..);
Mockito.when(service.addProduct(product)).thenReturn(saveProduct)
Lorsque j'envoie une requête, Spring génère un nouvel objet Project qui a les mêmes champs que product
mais l'instance est différente. C'est-à-dire que Mockito ne peut pas attraper when
déclaration. Je l'ai modifié comme ci-dessous et ça a marché :
Mockito.when(service.addProduct(Mockito.any())).thenReturrn(savedProduct)