Конфигурация Spring Feign: как проверить все методы @Bean - PullRequest
0 голосов
/ 01 июля 2019

Я хочу настроить Spring feign с помощью класса конфигурации, и я хочу убедиться, что все методы @Bean вызываются, когда Spring настраивает клиент feign для меня.

Как это проверить?

Например, у меня есть:

@FeignClient(
        name = "PreAuthSendRequest",
        url = "${xxx.services.preauth.send.url}",
        configuration = AppFeignConfig.class)
public interface RequestService {
    @PostMapping("")
    @Headers("Content-Type: application/json")
    PreAuthResponse execute(@RequestBody PreAuthRequest preAuthRequest);
}

И AppFeignConfig.java:

@Configuration
@RequiredArgsConstructor
public class AppFeignConfig{

    private final HttpClient httpClient;
    private final Jackson2ObjectMapperBuilder contextObjectMapperBuilder;

    @Bean
    public ApacheHttpClient client() {
        return new ApacheHttpClient(httpClient);
    }

    @Bean
    public Decoder feignDecoder() {
        return new JacksonDecoder((ObjectMapper)contextObjectMapperBuilder.build());
    }

    @Bean
    public Encoder feignEncoder() {
        return new JacksonEncoder((ObjectMapper)contextObjectMapperBuilder.build());
    }

    @Bean
    public Retryer retryer() {
        return Retryer.NEVER_RETRY;
    }


    @Bean
    public ErrorDecoder errorDecoder() {
        return new ServiceResponseErrorDecoder();
    }
}

Итак, как проверить, что все методы @Bean вызваны?Я знаю @MockBean, но я хочу проверить, действительно ли называются config.feignDecoder() и т. Д.

Когда я пытаюсь context.getBean(RequestService.class); и вызвать execute() метод, кажется, что он отправляетреальный запрос и без проволочек, это не удается, очевидно.

1 Ответ

0 голосов
/ 01 июля 2019

Пока у меня есть это:

@SpringBootTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles("test")
class RequestServiceTest {

    @Autowired
    private ApplicationContext applicationContext;

    @MockBean
    private ApacheHttpClient client;

    @MockBean
    private Decoder feignDecoder;

    @MockBean
    private Encoder feignEncoder;

    @MockBean
    private Retryer retryer;

    @MockBean
    private ErrorDecoder errorDecoder;

    @Test
    void shouldRetrieveBeansFromApplicationContextToConstructConfigurationInstance() {
        AppFeignConfig config = applicationContext.getBean(AppFeignConfig.class);
        Assertions.assertEquals(config.feignEncoder(), feignEncoder);
        Assertions.assertEquals(config.feignDecoder(), feignDecoder);
        Assertions.assertEquals(config.errorDecoder(), errorDecoder);
        Assertions.assertEquals(config.client(), client);
        Assertions.assertEquals(config.retryer(), retryer);
    }

}

Я не знаю, так ли это должно быть.Если есть идеи, пожалуйста, прокомментируйте.

...