Тестирование автоматического выключателя (Hystrix Javanica) с Mockito - PullRequest
0 голосов
/ 08 января 2019

Я звоню в сервис с 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 голосов
/ 14 февраля 2019

Это из-за концепции сервлета.

Когда вы тестировали с mockito, он используется не сервлетом. Это просто работает внутри контекста приложения.

Однако вы можете не забыть настроить Hystrix, настроенный сервлет, в вашем приложении.

Hystrix нужна концепция сервлета, она запрашивается у другого клиента. Сервлет перехватывает запрос и приостанавливает его, если истекло время ожидания или неверный запрос

Я рекомендую вам написать сценарий python или другой сценарий, а затем запросить приложение, установленное с Hystrix.

...