Disons que j'écris une application et je dois pouvoir faire quelque chose comme ceci:
String url = "https://someurl/"; GetMethod method = new GetMethod(URLEncoder.encode(url)); String content = method.getResponseBodyAsString();
8 Réponses :
JEWBUNIT http://jwebunit.sourceforge.net/
Voici un Exemple d'essai ... c'est vraiment assez intuitif. p>
Oui, je connais avec Jwebunit, mais ici, je dois être capable de se moquer de l'URL actuelle. Jwebunit fonctionne lorsque le site Web / le service que vous appelez est en cours d'exécution.
Vous pouvez toujours lancer un serveur THTTPD code> dans le test de votre appareil pour servir les demandes localement. Bien que, idéalement, vous avez un
getMethod code> bien testé, puis vous pouvez simplement vous moquer de cela et ne pas avoir à avoir un serveur distant autour de tous vos tests. P>
Vous pouvez envelopper ce code dans une classe et avoir webclient.geturl () puis simulés (par exemple, jmock ) Cette méthode pour renvoyer des fichiers stockés - disons
Si vous écrivez un test d'unité, vous ne voulez pas de dépendances externes. De l'API,
method.getResponseBodyAsString()
Mais la getMethod est en cours de création dans le code lui-même, pas dans mon test de l'unité, je ne peux donc pas se moquer de cela.
Je ne comprends pas, vous ne contrôlez pas le code que vous testez?
Je contrôle le code, mais l'objet getMethod est en cours de création de la méthode que je teste, donc je ne peux pas passer à un objet simulé. La façon dont une maquette fonctionne est que vous le configurez à l'avance et que vous le transmettez à la méthode que vous testez, mais dans ce cas, l'objet getMethod est créé à l'intérieur de la méthode elle-même, donc je ne peux donc pas le transmettre. Si c'est Pas clair, s'il vous plaît laissez-moi savoir.
@DCP, ah gotya maintenant. Eh bien, la réponse évidente est le refacteur pour vous injecter ou simplement définir le httpmethod que vous voulez ... Cela pourrait être mieux que d'utiliser une dépendance externe pour aller sur le Web, ce qui va échouer de manière inattendue. Mieux avoir une cohérence dans les tests ...
Vous n'êtes pas sûr de ce que vous entendez par «Refectory vous injecter ou simplement définir le HTTPMETHOD que vous voulez», pouvez-vous élaborer? L'autre idée que j'avais était de créer une maquette pour le client HTTP, puis je pourrais faire ce que je voulais (c'est-à-dire que je créerais mes propres implémentations simulées pour GetMethod, etc.).
À quelle étendue êtes-vous intéressé à moquer de cet appel "Get", car si vous recherchez un cadre de moqueur à usage général pour Java, qui s'intègre bien à Junit et permet de configurer les attentes qui sont automatiquement affirmées lorsqu'elles sont incorporées dans une suite JUnit , alors vous devez vraiment jeter un coup d'œil à jmock .
Maintenant sans autre code, il est difficile de déterminer Que ce soit en fait ce que vous recherchez, mais un exemple (un peu inutile), de quelque chose de similaire à celui que vous avez écrit, irait quelque chose comme ceci: p>
HMM, alors je pourrais envisager d'utiliser un cadre d'extension Java telle que des équipes d'objet, capables de réacheminer des appels de méthode spécifiques à vos propres méthodes définies, vous pouvez ainsi appuyer sur le point précis du flux de contrôle dont vous avez besoin pour modifier, à injecter soit votre propre code ou votre objet moqué. Peu importe qu'il s'agisse d'une méthode publique ou privée, les objectifs agissent comme une superset à Java, vous pouvez donc faire des choses que Java ne serait normalement pas capable de faire.
Vous avez essentiellement deux options: p>
E.g. Réfacteur le code pour vous permettre d'injecter une implémentation simulée à un moment donné. Il y a beaucoup de façons de faire cela. par exemple. Créez un getURLassRing () et moquez cela. (également suggéré ci-dessus). Ou créer une usine Getter URL qui renvoie un objet getMethod. L'usine peut alors être moquée. P>
Ceci peut être atteint de plusieurs manières. Cela peut être externe au test E.G. le plugin de jetty maven. ou le test peut démarrer par programme le serveur. Voir: http://docs.codehaus.org/display/jetty/embedding+Jetty a> p>
Le fonctionnement sur HTTPS compliquera cela, mais il sera toujours possible avec des certificats auto-signés. Mais je vous demanderais - ce que vous voulez tester exactement? Je doute que vous ayez réellement besoin de tester la fonctionnalité HTTPS, sa technologie éprouvée. P>
Personnellement, j'irais pour l'option 1 - Vous essayez de tester la fonctionnalité d'une bibliothèque externe. C'est généralement inutile. Il est également une bonne pratique pour résumer vos dépendances aux bibliothèques externes. p>
J'espère que cela aide. P>
Jetez un coup d'oeil à Jadler ( http://jadler.net ), une bibliothèque HTTP STABBING / MOCKING DI travaillé depuis quelque temps. La version stable 1.0.0 vient de sortir, elle devrait fournir les capacités que vous avez demandées:
@Test public void getAccount() { onRequest() .havingMethodEqualTo("GET") .havingURIEqualTo("/accounts/1") .havingBody(isEmptyOrNullString()) .havingHeaderEqualTo("Accept", "application/json") .respond() .withTimeout(2, SECONDS) .withStatus(200) .withBody("{\"account\":{\"id\" : 1}}") .withEncoding(Charset.forName("UTF-8")) .withContentType("application/json; charset=UTF-8"); final AccountService service = new AccountServiceRestImpl("http", "localhost", port()); final Account account = service.getAccount(1); assertThat(account, is(notNullValue())); assertThat(account.getId(), is(1)); } @Test public void deleteAccount() { onRequest() .havingMethodEqualTo("DELETE") .havingPathEqualTo("/accounts/1") .respond() .withStatus(204); final AccountService service = new AccountServiceRestImpl("http", "localhost", port()); service.deleteAccount(1); verifyThatRequest() .havingMethodEqualTo("DELETE") .havingPathEqualTo("/accounts/1") .receivedOnce(); }
Utilisez XML Mimic Stub Server, qui peut simuler une réponse HTTP statique en fonction des paramètres de la demande, des en-têtes, etc. Il est très simple de la configurer et de l'utiliser. P>
http://xmlmimic.sourceforge.net/ http://sourceforge.net/projects/xmlmimic/ p>
Voici une question similaire il traite des pages JSP de débogage, mais cela fonctionne la même chose avec des pages statiques
Dupliqué possible de Stackoverflow.com/q/393099/2093341