我正在用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
通常我应该在每次通话中都遇到“短路和后备失败”的情况
答案 0 :(得分:0)
这是因为servlet概念。
在使用嘲笑测试时,它用于非servlet。 那只是在内部应用程序上下文中工作。
但是,您可能还记得在应用程序中设置配置了servlet的Hystrix。
Hystrix需要servlet概念,它是从其他客户端请求的。 servlet捕获到请求并暂停超时或错误请求...
我建议您编写python脚本或其他脚本,然后请求与Hystrix一起安装的应用程序。