如何实施集成测试以检查我的断路器后备是否被调用?

leo*_*rdo 7 testing spring-boot hystrix spring-cloud-feign spring-cloud-netflix

在我的应用程序中,我需要调用外部端点,如果速度太慢,则会激活回退.

以下代码是我的应用程序的示例:

@FeignClient(name = "${config.name}", url = "${config.url:}", fallback = ExampleFallback.class)
public interface Example {
@RequestMapping(method = RequestMethod.GET, value = "/endpoint", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    MyReturnObject find(@RequestParam("myParam") String myParam);
}
Run Code Online (Sandbox Code Playgroud)

它的后备实施:

@Component
public Class ExampleFallback implements Example {

    private final FallbackService fallback;

    @Autowired
    public ExampleFallback(final FallbackService fallback) {
        this.fallback = fallback;
    }

    @Override
    public MyReturnObject find(final String myParam) {
        return fallback.find(myParam);
    }
Run Code Online (Sandbox Code Playgroud)

此外,配置的断路器超时: hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

如何实现集成测试以检查我的电路中断是否正常工作,即,如果我的端点(在这种情况下是模拟的)很慢或者它是否返回了像4xx或5xx这样的错误?

我正在使用带有Spring Cloud的Spring Boot 1.5.3(Feign + Hystrix)

k3b*_*k3b 1

注意我不知道 Feign 或 Hystrix。

在我看来,实现一个模拟 Feign+Hystrix 不同实现细节的自动化集成测试是有问题的——这个实现细节可能随时改变。有许多不同类型的故障:主端点无法访问、非法数据(即,在以特殊格式提取 xml 数据时接收到 html 错误消息)、磁盘已满,......

如果你模拟一个端点,你会假设 Feign+Hystrix 的实现细节,端点在错误情况下的行为方式(即返回 null,返回一些特定的错误代码,抛出 Xyz 类型的异常......)

我只会创建一个自动化集成测试,其中包含一个真正的主端点,该端点具有永远无法访问的 url 和一个模拟后备端点,您可以在其中验证处理的数据来自模拟。此自动化测试假设从应用程序的角度来看,“网络连接太慢”的处理与“url-notfound”相同。

对于所有其他测试,我将在 Feign+Hystrix 周围创建一个薄包装接口,您可以在其中模拟 Feign+Hystrix。通过这种方式,您可以自动测试,例如,如果您从主接口接收到 200 字节然后得到一个expexpation,会发生什么情况。

有关隐藏外部依赖项的详细信息,请参阅onion-architecture