Comment puis-je l'unité de test de code qui appelle le Maillot de l'API Client?

J'ai écrit le code qui appelle le Maillot de l'API client qui appelle à son tour un service web qui est hors de mon contrôle. Je ne veux pas que mon test de l'unité d'appeler le service web réelle.

Quelle est la meilleure approche pour écrire un test unitaire pour le code qui appelle le Maillot de l'API client? Dois-je utiliser le Maillot server API pour écrire un JAX-RS service web, puis utilisez le Maillot Framework de Test pour le test de l'unité? Ou devrais-je se moquer de la Jersey appels de service web? J'ai accès à JMock. Ou devrais-je essayer une autre approche?

Au cours de mes recherches, j'ai trouvé cette discussion décrivant les différentes options, mais j'ai trouvé une solution complète. Existe-il des exemples de code indiquant une suggestion de JUnit approche? Je ne pouvais pas trouver tout dans le Maillot de la documentation.

Voici le code source correspondant:

public String getResult(URI uri) throws Exception {
  //error handling code removed for clarity
  ClientConfig clientConfig = new DefaultClientConfig();
  Client client = Client.create(clientConfig);
  WebResource service = client.resource(uri);
  String result = service.accept(accept).get(String.class);
  return result;
}

Ici sont des exemples de code de test, je voudrais transmettre. Je voudrais tester (1) passant dans une URI valide et d'obtenir une chaîne valide en retour et (2) en le passant dans un invalide (pour quelque raison que ce soit -- inaccessible ou non autorisée) d'URI et d'obtenir une exception en arrière.

@Test
public void testGetResult_ValidUri() throws Exception {
  String xml = retriever.getResult(VALID_URI);
  Assert.assertFalse(StringUtils.isBlank(xml));
}

@Test(expected = IllegalArgumentException.class)
public void testGetResult_InvalidUri() throws Exception {
  retriever.getResult(INVALID_URI);
}

Tout ce qui précède est la simple description de ce que mon code ne. En réalité, il y a une couche sur le dessus de celui qui accepte deux Uri, essaie d'abord d'appeler le premier URI, et si l'URI échoue, alors il essaie de l'appel de la deuxième URI. Je voudrais avoir des tests unitaires de couverture (1) le premier URI réussit, (2) le premier URI échoue et le deuxième URI réussit, et (3) les deux Uri échouer. Ce code est suffisamment complexe pour que j'ai envie de tester ces différents scénarios à l'aide de JUnit, mais pour ce faire j'ai besoin pour exécuter réelle en matière de services web ou pour se moquer de la Jersey client appels d'API.

  • Exactement ce que vous souhaitez tester dans cette méthode? Quelles sont les critereas, que le test est passé?
  • Eh bien, Si vous voulez faire de test de l'unité, alors vous devez avoir le bon fonctionnelle des services.
  • J'ai mis à jour la question que je veux tester (1) passant dans une URI valide et d'obtenir une chaîne valide en retour et (2) en le passant dans un invalide (pour quelque raison que ce soit -- inaccessible ou non autorisée) d'URI et d'obtenir une exception en arrière.