В настоящее время у меня есть проект, использующий TestNG для выполнения тестов моего проекта Spring. В моем проекте у меня есть набор интерфейсов Feign, которые обрабатывают внешние вызовы в моей конфигурации Eureka. Мне трудно понять, как имитировать/перехватывать эти вызовы для каждого теста во время выполнения.
Вот пример одного из моих интерфейсов Feign:
@FeignClient ("http://my-service")
public interface MyServiceFeign {
@RequestMapping (value = "/endpoint/{key}", method = RequestMethod.GET)
SomePojo getByKey(@PathVariable ("key") String key);
}
У меня есть служба, которая зависит от клиента:
@Service
public class MyService {
@Autowired
private MyServiceFeign theFeign;
public SomePojo doStuff() {
return theFeign.getByKey("SomeKey");
}
}
Мои тесты запускаются просто через:
@SpringBootTest (
classes = Service.class,
webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT
)
@TestExecutionListeners (
inheritListeners = false,
listeners = {
DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class
}
)
@DirtiesContext
@ContextConfiguration (initializers = CustomYamlLoader.class)
@ActiveProfiles ("test")
publi class MyModuleTest extends AbstractTestNGSpringContextTests {
// ....
}
Что я хочу сделать в своем тесте, так это выполнить что-то вроде этого:
@Test
public void doSomeTest() {
SomePojo fakeReturn = new SomePojo();
fakeReturn.setSomeStuff("some stuff");
/*
!!! do something with the injected feign for this test !!!
setupFeignReturn(feignIntercept, fakeReturn);
*/
SomePojo somePojo = injectedService.doStuff();
Assert.assertNotNull(somePojo, "How did I get NULL in a fake test?");
}
Итак, вот моя дилемма: мне не хватает ключевого понимания, чтобы сделать это, я думаю. Это или я полностью отсутствует концепция того, как это должно быть обработано. Я не думаю, что здесь имеет смысл использовать резервную реализацию, но я могу ошибаться.
Помощь!