NotifyBuilder.matches () всегда истекает

Я использую блокировку для достижения этого эффекта, теперь я задаюсь вопросом, правильно ли он хочет, чтобы кто-то захотел прокомментировать?

// as a field of the class where i wan't to do the synchronous `volley` call   
Object mLock = new Object();


// need to have the error and success listeners notifyin
final boolean[] finished = {false};
            Response.Listener<ArrayList<Integer>> responseListener = new Response.Listener<ArrayList<Integer>>() {
                @Override
                public void onResponse(ArrayList<Integer> response) {
                    synchronized (mLock) {
                        System.out.println();
                        finished[0] = true;
                        mLock.notify();

                    }


                }
            };

            Response.ErrorListener errorListener = new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    synchronized (mLock) {
                        System.out.println();
                        finished[0] = true;
                        System.out.println();
                        mLock.notify();
                    }
                }
            };

// after adding the Request to the volley queue
synchronized (mLock) {
            try {
                while(!finished[0]) {
                    mLock.wait();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
0
задан Sri Sankaran 16 January 2019 в 04:00
поделиться

1 ответ

Закрытие петли & amp; отвечая на мой собственный вопрос.

Во-первых - Действительно, повторные попытки не учитываются для выполненных сообщений.

Как отметил Клаус Ибсен, предпочтительным (самым коротким?) Решением является проверка того, что макет получает ожидаемое количество сообщений. Это будет max_retries + 1 (4 в моем случае). Таким образом, рабочий код выглядит как

@Test
public void simulateError() throws Exception {
    /*
     * Verify the error handling logic by checking the number of messages that are delivered.
     * It must be 1 + number of retries.
     */
    mock.expectedMessageCount(maxRetries + 1);
    mock.setAssertPeriod(6000); // Necessary to ensure the message count is treated as an exact number.
    mock.whenAnyExchangeReceived(new Processor() {

        @Override
        public void process(Exchange exchange) throws Exception {
            System.out.println("Intercepted to-endpoint");
            ProcessingFailedException e = new FooException("Error during processing");
            exchange.setException(e);

            throw e;
        }
    });
    producerTemplate.sendBody(umbFrom, "Hello world");
    mock.assertIsSatisfied();
}
0
ответ дан Sri Sankaran 16 January 2019 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: