Retryable не работает в отдельном потоке

Я пытаюсь проверить, был ли мой метод повторен несколько раз, если происходит какое-то исключение. И если я вызываю метод напрямую, он работает хорошо. Но если я вызову его в отдельном потоке, мой метод тестирования не будет выполнен, он не увидит попыток повторной попытки. Это мои методы:

public class MyClass {
        @Inject
        private ServiceClass service;

        @Retryable(value = {Exception.class}, maxAttempts = 5, backoff = @Backoff(delay = 30000))
        public void retryMethod(Integer id, double dId)
        {
            Thread remoteDIUpdater = new Thread(() -> {
            service.updateIndex(id, dId);
            }
            );
        remoteDIUpdater.setDaemon(true);
        remoteDIUpdater.setName("RemoteDIUpdaterThread");
        remoteDIUpdater.start();
        }

        @Recover
        public void recover(Exception ex, Integer id, double dId)
        {
            logger.error("Error", ex);
        }
}

И это мой тестовый класс:

public class TestClass
{
    @Inject
    @InjectMocks
    private MyClass myClass;

    @Mock     
    private private ServiceClass service;

    @Test
    public void testMethod()
    {
        Integer id = 1;
        double dId = 2d;
        doThrow(Exception.class).when(service).retryMethod(id, dId);
        myClass.updateBetDangerIndex(betId, dangerIndex);
        verify(service, Mockito.times(5)).retryMethod(null, id, iId);
    }

}

Может быть, мой метод теста не так. НО, если я вызову свой метод просто так (без резьбы):

@Retryable(value = {Exception.class}, maxAttempts = 5, backoff = @Backoff(delay = 30000))
            public void retryMethod(Integer id, double dId)
            {             
                service.updateIndex(id, dId);              
            }

мой метод испытаний работает нормально. В чем ошибка?

1 ответ

Возможно, вам нужно добавить Thread.join() после remoteDIUpdater.start(), чтобы предотвратить завершение основного потока перед вашим потоком.

Другие вопросы по тегам