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