тестирование Spring Retry выдает ошибку: хотел * раз, но был 1 раз - PullRequest
0 голосов
/ 10 сентября 2018

Я использую пружинное повторение и хочу выполнить его модульное тестирование. но не смог заставить работать модульный тест. См. Мой код и тест ниже.
Когда я запускаю тест, он говорит, что ожидал 3 times, но был 1 time. Я должен что-то пропустить. спасибо

 @RunWith(SpringJUnit4ClassRunner.class)
 public class MyOperationsTest
 private MyOperations myOperations;
 @mock 
 Param1 param1;
 @mock 
 Param2 param2AnotherOperation; 

 @Before 
 public void setUp(){
     myOperations = new MyOperations(param1, param2AnotherOperation);     
 }
 @Test
    public void testmyMethodWithFailure_ShouldRetry3TimesThenThrowException() {
        MyException exception1 = new MyException ("exception 1");
        MyException exception2 = new MyException ("exception 2");
        MyException exception3 = new MyException ("exception 3");

        Mockito.doThrow(exception1).when(param2AnotherOperation).itsMethod(firstParam, secondParam);
        Mockito.doThrow(exception2).when(param2AnotherOperation).itsMethod(firstParam, secondParam);
        Mockito.doThrow(exception3).when(param2AnotherOperation).itsMethod(firstParam, secondParam);

        Throwable writingException =
                catchThrowable(() -> myOperations.myMethod(firstParam, secondParam));

        Mockito.verify(param2AnotherOperation, times(3)).itsMethod(firstParam, secondParam);
    }

в классе MyOperations

@Service
@EnableRetry
    public class MyOperations{
    Param1 param1;
    Param2AnotherOperation param2AnotherOperation
    public MyOperations(Param1 param1, Param2AnotherOperation param2AnotherOperation) {
        this.param1 = param1;
        this.param2AnotherOperation = param2AnotherOperation;

}

    @Retryable(value = {MyExceptoin.class},
            maxAttemptsExpression = "3",
            backoff = @Backoff(delayExpression = "#{@retryInterval}"))
            public void myMethod(firstParam, secondParam){
            try {                  
                param2AnotherOperation.itsMethod(firstParam, secondParam);
                ...                    
            }
            catch(Exception ex){
                throw new MyExceptoin(ex);
            }
        }

    }

1 Ответ

0 голосов
/ 10 сентября 2018

@EnableRetry должен быть в классе @Configuration; у вас это есть на @Service бобе.

EDIT

Вот быстрый взлом, чтобы вы начали; Я не проверял это, но это должно быть близко ...

@RunWith(SpringRunner.class)
public class So52262230ApplicationTests {

    private MyOperations myOperations;

    @Autowired
    Param1 param1;

    @Autowired
    Param2 param2AnotherOperation;

    @Autowired
    MyOperations myoperations;

    @Test
    public void testmyMethodWithFailure_ShouldRetry3TimesThenThrowException() {
        MyException exception1 = new MyException("exception 1");
        MyException exception2 = new MyException("exception 2");
        MyException exception3 = new MyException("exception 3");

        Mockito.doThrow(exception1).when(param2AnotherOperation).itsMethod(firstParam, secondParam);
        Mockito.doThrow(exception2).when(param2AnotherOperation).itsMethod(firstParam, secondParam);
        Mockito.doThrow(exception3).when(param2AnotherOperation).itsMethod(firstParam, secondParam);

        Throwable writingException = catchThrowable(() -> myOperations.myMethod(firstParam, secondParam));

        Mockito.verify(param2AnotherOperation, times(3)).itsMethod(firstParam, secondParam);
    }

    @Configuration
    @EnableRetry
    public static class Config {

        @Bean
        public Param1 param1() {
            //return a mock
        }

        @Bean
        public Param2 param2() {
            //return a mock
        }

        @Bean
        public MyOperations myOperations() {
            return new MyOperations(param1(), param2());
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...