Spring使用retryTemplate重试-单元测试

时间:2018-10-11 22:10:43

标签: spring-boot spring-retry retrytemplate

我正在使用retryTemplate,我不知道该如何进行单元测试。可以帮忙吗?

我有这段代码(例如),我想测试一下我第一次调用Card.create失败,但是第二次它可以工作。

@Autowired
private RetryTemplate retryTemplate; 

public String registerCard(final String cardNumber) throws ApiException {  
    final Card response = retryTemplate.execute(new RetryCallback<Card, ApiException>() {
        @Override public Card doWithRetry(RetryContext retryContext) throws ApiException {
          return Card.create(map);
        }
     }) ;
     return response.get("number").toString();
}

RetryTemplate的maxAttemps = 2,backOff = 1500。

最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

在您的测试中,将RetryListener实现添加到RetryTemplate;使用侦听器上的方法监视重试活动。

public interface RetryListener {

    /**
     * Called before the first attempt in a retry. For instance, implementers
     * can set up state that is needed by the policies in the
     * {@link RetryOperations}. The whole retry can be vetoed by returning
     * false from this method, in which case a {@link TerminatedRetryException}
     * will be thrown.
     *
     * @param <T> the type of object returned by the callback
     * @param <E> the type of exception it declares may be thrown
     * @param context the current {@link RetryContext}.
     * @param callback the current {@link RetryCallback}.
     * @return true if the retry should proceed.
     */
    <T, E extends Throwable> boolean open(RetryContext context, RetryCallback<T, E> callback);

    /**
     * Called after the final attempt (successful or not). Allow the interceptor
     * to clean up any resource it is holding before control returns to the
     * retry caller.
     * 
     * @param context the current {@link RetryContext}.
     * @param callback the current {@link RetryCallback}.
     * @param throwable the last exception that was thrown by the callback.
     * @param <E> the exception type
     * @param <T> the return value
     */
    <T, E extends Throwable> void close(RetryContext context, RetryCallback<T, E> callback, Throwable throwable);

    /**
     * Called after every unsuccessful attempt at a retry.
     * 
     * @param context the current {@link RetryContext}.
     * @param callback the current {@link RetryCallback}.
     * @param throwable the last exception that was thrown by the callback.
     * @param <T> the return value
     * @param <E> the exception to throw
     */
    <T, E extends Throwable> void onError(RetryContext context, RetryCallback<T, E> callback, Throwable throwable);
}