我正在使用 spring cloud 的 eureka 和 feign 在某些服务之间进行通信(比如说 A 和 B)。现在我想对我的单个服务(A)的服务层进行单元测试。问题是,这个服务 (A) 正在使用一个 feign 客户端来请求另一个服务 (B) 的一些信息。
在没有任何特殊配置的情况下运行单元测试会引发以下异常:java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: service-b
=> 但我不希望任何服务器运行。
我的问题是:有没有办法模拟 feign 客户端,所以我可以在不运行 eureka 实例和服务(B)的情况下对我的服务(A)进行单元测试?
编辑:我最终为假装客户端创建了一个存根。存根被标记为主要组件,以强制在我的测试中实例化存根。
这是我想出的解决方案。
//the feign client
@FeignClient("user")
public interface UserClient {
UserEntity getUser();
}
//the implementation i use for the tests
@Component
@Primary //mark as primary implementation
public class UserClientTestImpl implements UserClient {
@Override public UserEntity getUser() {
return someKindOfUser;
}
}