2016-09-19 1 views
7

J'ai une classe qui utilise un client Feign. Auparavant, j'ai utilisé Mockito et donné une réponse stockée pour chacun des appels de méthode dans le client Feign. Maintenant, je veux utiliser WireMock, afin que je puisse voir que mon code gère correctement les différents types de codes de réponse. Comment vais-je faire cela? Je n'arrive pas à comprendre comment câbler mon client Feign dans le test, et le câbler pour qu'il utilise Wiremock à la place de l'URL que j'ai configurée dans mon fichier application.yml. Tout pointeur serait grandement apprécié.Comment utiliser WireMock sur un client Feign dans une application Spring Boot?

Répondre

3

Peut-être que vous voulez regarder ce projet https://github.com/ePages-de/restdocs-wiremock

Cela vous permet de générer et de publier des extraits de wiremock dans vos printemps essais mvc (en utilisant ressort de repos docs).

Enfin, vous pouvez utiliser ces extraits pour démarrer un serveur wiremock pour répondre à ces demandes enregistrées dans votre test. Si vous ne tenez pas compte de cette solution intégrée, vous pouvez simplement utiliser la règle wiremock JUnit pour lancer votre serveur wiremock pendant votre test. http://wiremock.org/docs/junit-rule/

Voici un exemple de test qui utilise un port dynamique et wiremock configure ruban pour utiliser ce port: (utilisez-vous feindre et le ruban?)

@WebAppConfiguration 
    @RunWith(SpringRunner.class) 
    @SpringBootTest() 
    @ActiveProfiles({"test","wiremock"}) 
    public class ServiceClientIntegrationTest { 

     @Autowired //this is the FeignClient service interface 
     public ServiceClient serviceClient; 

     @ClassRule 
     public static WireMockRule WIREMOCK = new WireMockRule(
       wireMockConfig().fileSource(new ClasspathFileSource("path/to/wiremock/snipptes")).dynamicPort()); 

     @Test 
     public void createSome() { 
      ServiceClient.Some t = serviceClient.someOperation(new Some("some")); 
      assertTrue(t.getId() > 0); 
     } 

//using dynamic ports requires to configure the ribbon server list accordingly 
     @Profile("wiremock") 
     @Configuration 
     public static class TestConfiguration { 

      @Bean 
      public ServerList<Server> ribbonServerList() { 
       return new StaticServerList<>(new Server("localhost", WIREMOCK.port())); 
      } 
     } 
    } 
+0

Merci d'avoir répondu! Je n'utilise pas de ruban - seulement feindre. J'utilise '@ FeignClient' avec' url = externalApiUrl'. Comment puis-je injecter l'url wiremock à la place? – L42

+0

wiremock exécute en fait un serveur, alors assurez-vous que FeignClient pointe vers 'localhost: WIREMOCK.port'. Je ne suis pas sûr si l'URL peut pointer vers une propriété de configuration. Il ne semble pas soutenir les expressions de printemps. Dans une question similaire à avoir une URL de feinte dynamique, la réponse acceptée propose d'utiliser le ruban et le mécanisme de configuration tel qu'utilisé par le test ci-dessus. http://stackoverflow.com/a/29278126/5371736 –

+0

Après beaucoup de difficultés avec les versions de printemps, je pense que je suis plus proche. Cependant, mon client feign autowired est mis à "null". Savez-vous pourquoi cela pourrait être? Mon plan actuel est d'essayer de définir l'URL wiremock comme une propriété dans @SpringBootTest, de sorte que le client feign (quand pas null) ira à wiremock. – L42