10
Июн
2021

Выполнение метода до определенного условия

Я пишу тестовый spock проект, который работает c REST приложением, который в свою очередь работает с БД.

Проблематика заключается в том при дергании рест запросов, в БД не успевает записываться инфа и приходится изобретать такие вот штуки.

Как можно реализовать метод, который будет выполняться пока не удовлетворит некоторое условие. Всё что я смог реализовать это:

class Helper { 


   static def waitForResponse(Closure closure, int size = 1) {
            int count = 0
            BaseResponse response = closure.call()
            while (response.body.size != size && count <= 15) {
                response = closure.call()
                log.info("try to get response, count: ${count}, response: ${response}")
                if (response.body.size != size) {
                    sleep 200
                }
                count++
            }
            checkSuccess(response)
            return response.body
        }
   }
}

Это удовлетворяет только тем запросам, формат которых - лист, да и то работает не совсем так, как мне нужно. В ответе может быть List<Мар>

Нужно что то типо:

class Waiter {

    BaseResponse response = waitForResponse({someMetod(someParam)}, it.someField == "someValue")

    // либо 

    BaseResponse response = waitForResponse({someMetod(someParam)}, {it.someField == "someValue"})

}

т.е. someMetod(someParam) будет выполняться с промежутками в 200мс до тех пор пока не удовлетворит условию либо закончатся попытки

Быть может я вообще не в ту степь копнул и есть что то более изящное?

P.S. я всего лишь тестер, поэтому предложения про то что нужно оптимизировать работу с БД мне вряд ли помогут:(

Источник: https://ru.stackoverflow.com/questions/1293875/%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0-%D0%B4%D0%BE-%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE-%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D1%8F

Тебе может это понравится...

Добавить комментарий