我目前有一个项目,使用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?");
}
所以,这是我的困境:我似乎缺少一个关键的理解来做到这一点。或者我完全没有理解如何处理这个概念。我不认为在这里使用备用实现是有意义的,但我可能错了。
求助!