У меня есть простой интерфейс FeignClient, который я хотел бы выполнить «единичный»/интеграционный тест с поддельным HTTP-сервером, например WireMock. Идея состоит в том, чтобы протестировать сопоставление с ответом на выборку HTTP API, без настройки всего контекста Spring Boot/Cloud.Программно создайте экземпляр FeignClient для тестов
@FeignClient(name = "foo", url = "${foo.url}")
public interface FooClient {
@RequestMapping(value = "/foo/{foo-id}/bar", method = RequestMethod.GET)
public Bar getBar(@PathVariable("foo-id") String fooId);
}
Есть ли способ программно создать экземпляр этого интерфейса, как источник хранилища данных через *RepositoryFactoryBean
?
В исходном коде я вижу FeignClientFactoryBean
, но он защищен пакетом, и в любом случае он полагается на объект для получения своих зависимостей.
Благодарим вас за ответ, но это полная противоположность тому, что я искал, извините _ «unit test» _ вводит в заблуждение. Я знаю, что могу издеваться над компонентами в рамках единичного теста с использованием контекста Spring, я хочу, чтобы программная реализация «FeignClient» была реализована программно _without_, чтобы настроить контекст Spring. Я хочу проверить, соответствуют ли относительные пути моего клиента, и работает ли JSON-сопоставление - точно так же, как тест интеграции persistence с HSQLDB. Чем больше я смотрю на исходный код, тем больше я думаю, что это невозможно без контекста Spring Boot/Cloud. –
Это действительно невозможно, так как сам @FeignClient - это весенняя аннотация. Когда вы заглянете в источник пружины, вы увидите, что контекст принимает внутреннюю декларацию и настройку feign вручную. Вы можете сделать это самостоятельно и протестировать против поддельного HTTP-сервера, но это будет очень много работы. –
Возможно с репозиториями JPA или Cassandra, которые также являются аннотированными интерфейсами. Разница заключается в том, что классы FactoryBean Spring Data являются общедоступными и полностью отделены от контекста Spring. Вероятно, они не потрудились сделать это с помощью «FeignClient», потому что базовый Feign уже является автономным проектом. –