使用Mockito测试断路器(Hystrix Javanica)

时间:2019-01-08 10:20:44

标签: java jboss hystrix

我正在用Javanica保护服务电话。我想测试断路器。关于我的条件:JBoss,SpringFramework(但不是Springboot!)。我已经配置了Javanica,并且可以正常运行,并通过一个简单的方法调用进行了测试,在其中我强制打开断路器。我得到了正确的例外:

  

短路和回退失败

我正在尝试创建一个断路器测试,该测试在恰好有10个方法调用时给了我“短路和后备失败”的信息。我需要在哪里修复我的模拟测试?

我设置了circuitBreaker.forceOpen =“ true”并模拟了我的服务。

import static org.mockito.Mockito.when;

public class HystrixCircleBreakerTest extends AbstractMockitoTest {

    @Bean
    private ServiceAdapter serviceAdapter;

    @Mock
    private Service service;

    @Test
    public void circuitBreakerTest() {

        String errorMsg = "Timeout error";
        final RuntimeException timeOutException = new RuntimeException(errorMsg);

        when(service.getMediatorForContract(99177661)).then(new Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                Thread.sleep(1000L);
                throw timeOutException;
            }
        });

        Exception circleBreaker = new Exception();
        final String errorMsgCircuit = "Hystrix circuit short-circuited and is OPEN";
        RuntimeException runtimeException = new RuntimeException(errorMsgCircuit);

        for (int t = 0; t <= 10; t++) {
            System.out.println("Servicecall: " + t);
            try {
                serviceAdapter.getMediatorForContract("99177661");

            } catch (RuntimeException e) {
                System.out.println("Exception: " + e.getMessage());
                circleBreaker = e;
            }
        }
    }
}

当前结果:

Servicecall: 0
Exception: Timeout error

Servicecall: 1
Exception: Timeout error

Servicecall: 2
Exception: Timeout error

Servicecall: 3
Exception: Timeout error

Servicecall: 4
Exception: Timeout error

Servicecall: 5
Exception: Timeout error

Servicecall: 6
Exception: Timeout error

Servicecall: 7
Exception: Timeout error

Servicecall: 8
Exception: Timeout error

Servicecall: 9
Exception: Timeout error

Servicecall: 10
Exception: Timeout error

通常我应该在每次通话中都遇到“短路和后备失败”的情况

1 个答案:

答案 0 :(得分:0)

这是因为servlet概念。

在使用嘲笑测试时,它用于非servlet。 那只是在内部应用程序上下文中工作。

但是,您可能还记得在应用程序中设置配置了servlet的Hystrix。

Hystrix需要servlet概念,它是从其他客户端请求的。 servlet捕获到请求并暂停超时或错误请求...

我建议您编写python脚本或其他脚本,然后请求与Hystrix一起安装的应用程序。