Примечания
@EnableRetry
и @Retryable
должны обрабатываться пружиной, которая должна генерировать прокси на лету во время выполнения вне DAO. Прокси добавит функциональность повтора.
Теперь, когда вы запускаете тест, я не вижу, чтобы он вообще работал весной. Вы упомянули, что используете Spring Boot, но не используете @SpringBootTest
. С другой стороны, вы также не указываете конфигурацию для загрузки класса (аннотация * @ContextConfiguration
на HystrixServiceTest
class)
Поэтому я пришел к выводу, что вы не правильно инициализируете spring и это не может обработайте аннотацию @Retry
в результате правильно.
Дополнительные вещи, которые мне кажутся неправильными:
Вам следует использовать @MockBean
(если вы правильно начнете пружину в тесте), чтобы она не просто создаст @Mock
(для которого вам нужен бегун mockito BTW), но создаст фиктивный пружинный бин и зарегистрирует его в контексте приложения, эффективно переопределяя стандартное объявление бина.
Я думаю, вы должны сделать что-то вроде этого:
@RunWith(SpringRunner.class)
@SpringBootTest
public class HystrixServiceTest {
@Autowired // if everything worked right, you should get a proxy here actually (you can check that in debugger)
private MaxAttemptRetryService maxAttemptRetryService;
@MockBean
private MaxAttemptDao maxAttemptDao;
@Test
public void ff() throws Exception{
when(maxAttemptDao.sam()).thenThrow(Exception.class);
maxAttemptRetryService.retry("ll");
verify(maxAttemptDao, times(3)).sam();
}
}