Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add @FeignTest annotation for Feign Layer #427

Open
yesmanmx opened this issue Nov 12, 2020 · 4 comments
Open

Add @FeignTest annotation for Feign Layer #427

yesmanmx opened this issue Nov 12, 2020 · 4 comments
Labels
enhancement New feature or request waiting for votes

Comments

@yesmanmx
Copy link

Hello!
I started to integrate Spring Cloud Contract into existing project.

No problems on producer side. Base test class annotated with @WebMvcTest, so only Web Layer getting configured and has same state as for production deployment. Services mocked, Web works, tests passed, stubs published

Issue comes on consumer side.
We are using Feign as client. So Preferable solution is to create test, inject FeignClient with same configuration, as for production deployment and perform http requests using using Feign abstraction.

Example from documentation:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.NONE)
@AutoConfigureStubRunner(ids = {"com.example:http-server-dsl:+:stubs:6565"},
        stubsMode = StubRunnerProperties.StubsMode.LOCAL)
public class LoanApplicationServiceTests

This will work, but in services with complex configuration it is difficult to create such configuration (@SpringBootTest).
All properties must be set, production only beans must be mocked, etc. More over - there is no need for Feign tests to create all service, configuration and controller beans.

So existent of special annotation for Feign Client Layer Test (@FeignTest) will helps a lot and sounds reasonable.
But to create this annotation deep knowledge of all Feign related spring auto configurations required (web converters, ribbon, eureka, jackson, etc.)

It would be great, if you will able to implement this annotation.

Thanks in advance,
Yesman Maxim.

@OlgaMaciaszek
Copy link
Collaborator

Hello, thanks for proposing this. @SpringBootTest provides the possibility to pass the exact configuration to use in the test and is very flexible. The feature you describe is a possible enhancement, but we must first verify how much interest in such a feature there is in the community. Marking as "waiting for votes".

@yesmanmx
Copy link
Author

Thank for reply

@poznachowski
Copy link

poznachowski commented Nov 24, 2021

Hey @OlgaMaciaszek. I came across this issue and wanted to share something I did recently at work (and used with success):
https://github.com/poznachowski/feigntest
This is what we would call a Feign slice test: Only things related to Feign (and Wiremock) are bootstrapped. It follows the same code structure as other Spring Boot slice tests. However, it is tailored a bit for my company's need: we always use @FeignClient url parameter, which is then substituted by the url of Wiremock.

If you find this (or something with this shape) worth adding - I'd be glad to contribute (preceded with some guidance).

@poznachowski
Copy link

@OlgaMaciaszek trying to draw a little more attention :) I can try and submit a MR request already, but still got some concerns about how to do it right.
My solution, for instance, is based on additional dependency of spring-cloud-contract-wiremock. I'd assume it should rather be an opt-in solution, that can be recommended in the docs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request waiting for votes
Projects
None yet
Development

No branches or pull requests

4 participants