gpt4 book ai didi

spring - 单元测试 Spring Cloud 服务的策略

转载 作者:行者123 更新时间:2023-12-01 07:18:07 24 4
gpt4 key购买 nike

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

单元测试data-service没问题,我只是通过关闭 Eureka

eureka.client.enabled=false

并为我的测试使用内存数据库。

访问 data-service来自 business-service , 我正在使用 @FeignClient("data-service")名为 DataClient 的带注释接口(interface)这是 @Autowired需要的地方。如果两者都在运行,则该服务由 Eureka 发现。这适用于所有服务都在运行的类似生产的设置。

但现在我想对我的 business-service 的一些功能进行单元测试。 .启动测试服务不会有问题
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
@SpringApplicationConfiguration(classes = Application.class)

就像我在 data-service 中所做的那样.问题是我的 FeignClient 的依赖于 Eureka 的发现。 ...所以我的测试类崩溃了,因为 Autowiring 我的 DataClient -实例不起作用。

我能告诉 Spring 使用 DataClient 的伪造实例吗?只是为了我的测试?或者是让我的测试运行 data-service 的可访问、正在运行的实例的唯一方法和我的 Eureka 服务器?

最佳答案

1、首先创建config bean,让discoveryclient和feignclient只在“eureka.enabled”为真时工作

@Configuration
@EnableDiscoveryClient
@EnableFeignClients
@ConditionalOnProperty(name = "eureka.enabled")
public class EurekaConfig {
}

2、禁用测试配置文件的eureka配置,所以在application-test.yml
eureka:
enabled: false

3、我的项目是maven构建的,所以我为我的feign客户端界面创建了一个implementation,例如:
@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 {}

假服务将注入(inject)到 spring 上下文中。

或者对于普通的单元测试用例,您可以只需要 mockito 模拟服务类并使用 set 方法或构造方法在您的类中注入(inject)模拟对象

关于spring - 单元测试 Spring Cloud 服务的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34307529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com