web-dev-qa-db-fra.com

Comment écrire Mockito Junit pour la méthode d'échange Resttemplate

Comment écrire mockito junit pour la méthode ci-dessous:

@Autowired
RestTemplate restTemplate;

ResponseEntity<?> execute(final String url, HttpMethod httpMethod,
                          HttpEntity<?> entityRequest,
                          String.class, 
                          Map<String, String> urlVariables){
    restTemplate.exchange(url, httpMethod, entityRequest, responseType, urlVariables);
}

S'il vous plaît, aidez-moi à écrire.

13
Java Learing
@RunWith(MockitoJUnitRunner.class)
public class ToTestTest {

  @InjectMocks
  private YourClass toTest;

  @Mock
  private RestTemplate template;

  @Test
  public void test() {
    toTest.execute(Mockito.anyString(), Mockito.any(), Mockito.any(), 
                   Mockito.any(), Mockito.any());

    Mockito.verify(template, Mockito.times(1))
                    .exchange(Mockito.anyString(),
                                    Mockito.<HttpMethod> any(),
                                    Mockito.<HttpEntity<?>> any(),
                                    Mockito.<Class<?>> any(),
                                    Mockito.<String, String> anyMap());
    }
 }
17
Robin Schürer

Je pense que l'approche la plus pratique et la plus appropriée dans ce cas (qui est côté client REST test en utilisant RestTemplate) sera MockRestServiceServer fourni par Spring Testing framework.

3
Marcin Kłopotek

Cela dépend de ce que vous voulez.

Une façon d'utiliser les mocks est de faciliter l'appel de la méthode execute. Pour cela, vous pouvez utiliser des versions simulées des paramètres réels, tels que HttpMethod et HttpEntity. Si la méthode sous-jacente exchange nécessite un certain comportement de ces paramètres, vous devrez peut-être le remplacer avec les méthodes when ... thenReturn de mockito.

Une fois ces paramètres simulés configurés pour que vous puissiez appeler vos méthodes execute, vous voudrez vérifier que son résultat est correct.

Pour vérifier la valeur renvoyée, vous pouvez utiliser les assertions JUnit traditionnelles.

De plus, vous voudrez peut-être vérifier que certaines interactions avec les objets raillés ont bien eu lieu. Pour cela, vous pouvez utiliser les méthodes verify de mockito pour vérifier, par exemple, qu'une certaine méthode HttpEntity est effectivement invoquée.

Techniquement, vous pouvez également vérifier que la méthode exchange du modèle de repos est appelée. Pour cela, vous devez vous moquer du RestTemplate et injecter la maquette dans votre classe en cours de test. Ensuite, vous pouvez utiliser verfiy de mockito pour vérifier que exchange est appelé correctement. C'est généralement la chose raisonnable à faire, surtout s'il y a plus de méthodes à tester dans votre classe en cours de test. Pour la méthode execute actuelle, cela semble un peu exagéré.

0
avandeursen