当前位置:  开发笔记 > 运维 > 正文

单元测试Spring Cloud Service的策略

如何解决《单元测试SpringCloudService的策略》经验,为你挑选了1个好方法。

给定以下Spring Cloud设置:A data-service可以访问数据库,可以访问eureka-service服务注册表和发现,第3个服务business-service是封装业务案例的各种服务之一.

单元测试data-service没问题,我只是关掉eureka via

eureka.client.enabled=false

并使用内存数据库进行测试.

要访问data-servicefrom 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> 小智..:

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方法或构造方法在类中注入模拟对象

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有