Awaitibility este o librărie excelentă pe care o poți folosi pentru sincronizarea operațiilor asincrone. Știu că sună puțin mai ciudat, dar dacă analizați puțin mai bine, veți observa că cel puțin o dată în viața dvs. de programator,v-ați întâlnit cu acest caz.
Și ca să vă ajut să vă dați seama despre ce e vorba, haideți să ne gândim la un simplu usecase de testare. Să zicem că aplicația dvs. procesează niște date în mod asincron și la un moment dat, după ce termină finalizarea, creează o nouă intrare într-o bază de date. Pentru testare, va trebui să rulați o comandă de procesare, va trebui să așteptați o perioadă de timp și apoi să vedeți că intrarea a fost creată în baza de date.
Acum, acest lucru nu e chiar așa de dificil de implementat – puteți să verificați din 500 în 500 de millisecunde, timp de 10 iterații. Dar de ce să scriem 5 linii de cod, când am putea să scriem și mai puțin?
await().atLeast(1, SECONDS).and().atMost(5, SECONDS).until(rowInsertedInDatabase());
Dacă vă jucați puțin cu codul de mai sus, veți vedea că nu face pooling din 500 în 500 millisecunde. Pentru aceasta va trebui să folosiți ceva de genul:
await().atLeast(1, SECONDS).and().atMost(5, SECONDS).pollInterval(500, TimeUnit.MILLISECONDS).until(rowInsertedInDatabase());
Bun. O să ziceți că puteți folosi această librărie doar pentru testat. Eeehh. Lucrurile nu stau chiar așa. O puteți folosi liniștit și pentru cod care ajunge în producție. Depinde foarte mult de situație. Am uitat să menționez faptul că pentru a folosi librăria în proiectul dvs, va trebui să aduceți în POM următoarea dependență:
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<version>4.0.2</version>
<scope>test</scope>
</dependency>
Spor la așteptat!