3 votes

Objet fantaisie de Spring boot retournant null à l'appel

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 .

1voto

vsk.rahul Points 41

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 ! !!!!

1voto

farukcankaya Points 176

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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X