给定以下Spring Cloud设置:A data-service
可以访问数据库,可以访问eureka-service
服务注册表和发现,第3个服务business-service
是封装业务案例的各种服务之一.
单元测试data-service
没问题,我只是关掉eureka via
eureka.client.enabled=false
并使用内存数据库进行测试.
要访问data-service
from business-service
,我正在使用一个带@FeignClient("data-service")
注释的接口DataClient
,这个接口是@Autowired
需要的.如果两者都在运行,Eureka会发现该服务.这适用于所有服务运行的类似生产的设置.
但现在我想对我的一些功能进行单元测试business-service
.用它来启动测试服务不是问题
@RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @IntegrationTest("server.port:0") @SpringApplicationConfiguration(classes = Application.class)
就像我在做的那样data-service
.问题是我的Eureka依赖发现FeignClient
...所以我的测试类崩溃,因为自动装配我的DataClient
实例不起作用.
我能告诉Spring使用伪造的实例来DataClient
进行测试吗?或者是让我的测试运行可访问的运行实例data-service
和我的Eureka服务器的唯一方法?
1,首先创建配置bean,让发现客户端和feignclient仅在"eureka.enabled"为真时才能工作
@Configuration @EnableDiscoveryClient @EnableFeignClients @ConditionalOnProperty(name = "eureka.enabled") public class EurekaConfig { }
2,禁用测试配置文件的eureka配置,因此在application-test.yml中
eureka: enabled: false
3,我的项目是由maven构建的,所以我为我的假装客户端界面创建了一个工具,例如:
@Service public class DataServiceImpl implements DataService {}
在此之后,当您在单元测试中运行测试时
@WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @IntegrationTest({"server.port=0", "management.port=0", "spring.profiles.active=test"}) public abstract class AbstractIntegrationTests {}
虚假服务将注入春天的背景.
或者对于正常的单元测试用例,你可以只需要mockito模拟服务类并使用set方法或构造方法在类中注入模拟对象