Testovanie spätných volaní pomocou aplikácie Mockito

1. Prehľad

V tomto krátkom návode sa zameriame na ako testovať spätné volania pomocou populárneho testovacieho rámca Mockito.

Preskúmame dve riešenia, najskôr pomocou ArgumentCaptor a potom intuitívne doAnswer () metóda.

Ak sa chcete dozvedieť viac o testovaní pomocou Mockita, pozrite si našu sériu Mockito tu.

2. Úvod do spätných volaní

Spätné volanie je časť kódu, ktorá sa odovzdáva ako argument metóde, od ktorej sa očakáva, že v danom čase zavolá (vykoná) argument.

Toto spustenie môže byť okamžité ako pri synchrónnom spätnom volaní, ale častejšie sa to môže stať neskôr ako pri asynchrónnom spätnom volaní.

Bežným scenárom použitia spätných volaní je počas servisných interakcií, keď potrebujeme spracovať odpoveď zo servisného volania.

V tomto výučbe použijeme Služby rozhranie zobrazené nižšie ako spolupracovník v testovacích prípadoch:

verejné rozhranie Service {void doAction (požiadavka na reťazec, spätné volanie); }

V Zavolaj späť argument odovzdáme triedu, ktorá zvládne odpoveď pomocou odpoveď (odpoveď T) metóda:

verejné rozhranie Callback {void response (T response); } 

2.1. Jednoduchá služba

Použijeme tiež priamy postup príklad služby na preukázanie toho, ako odovzdať a vyvolať spätné volanie:

public void doAction () {service.doAction ("our-request", new Callback () {@Override public void response (Response response) {handleResponse (response);}}); } 

The handleResponse metóda skontroluje, či je odpoveď platná, pred pridaním niektorých údajov do súboru Odozva objekt:

private void handleResponse (Response response) {if (response.isValid ()) {response.setData (new Data ("Successful data response")); }}

Kvôli prehľadnosti sme sa rozhodli nepoužívať výraz Java Lamda, ale výraz service.doActionvýzva by sa dala napísať aj stručnejšie:

service.doAction ("our-request", response -> handleResponse (response)); 

Viac informácií o výrazoch lambda sa dozviete tu.

3. Pomocou an ArgumentCaptor

Teraz sa pozrime na ako používame Mockito na chytenie Zavolaj späť objekt pomocou ArgumentCaptor:

@Test public void givenServiceWithValidResponse_whenCallbackReceived_thenProcessed () {obslužný program ActionHandler = nový ActionHandler (služba); handler.doAction (); verifikovať (služba) .doAction (anyString (), callbackCaptor.capture ()); Spätné volanie spätné volanie = callbackCaptor.getValue (); Odozva odpovede = nová odpoveď (); callback.reply (odpoveď); Reťazec expectMessage = "Úspešná odpoveď na dáta"; Údajové údaje = response.getData (); assertEquals ("Mala by sa zobraziť správa úspešná:", expectMessage, data.getMessage ()); }

V tomto príklade najskôr vytvoríme znak ActionHandler pred zavolaním na doAction metóda tohto psovoda. Toto je jednoducho obal našej jednoduchej služby doAction volanie metódy čo je miesto, kde vyvolávame naše spätné volanie.

Ďalej to overíme doAction bol zavolaný pri odovzdávaní našej falošnej služby anyString () ako prvý argument a callbackCaptor.capture () ako druhý, ktorý je miestom, kde zachytávame Zavolaj späť objekt. The getValue () metódu je potom možné použiť na vrátenie zachytenej hodnoty argumentu.

Teraz, keď máme Zavolaj späť objekt, vytvoríme a Odozva objekt, ktorý je štandardne platný skôr ako my zavolajte na odpovedať metódu priamo a tvrdiť, že údaje odozvy majú správnu hodnotu.

4. Pomocou doAnswer () Metóda

Teraz sa pozrieme na a spoločné riešenie pre stubbing metódy, ktoré majú spätné volania pomocou Mockita Odpoveď objekt a doAnswer metóda na odstránenie metódy neplatnostidoAction:

@Test public void givenServiceWithInvalidResponse_whenCallbackReceived_thenNotProcessed () {Response response = new Response (); response.setIsValid (false); vyvolanie doAnswer ((odpoveď) -> {callback callback = invocation.getArgument (1); callback.reply (response); data data = response.getData (); assertNull ("Žiadne údaje v neplatnej odpovedi:", údaje); návrat null;}). when (service) .doAction (anyString (), any (Callback.class)); Ovládač ActionHandler = nový ActionHandler (služba); handler.doAction (); } 

A v našom druhom príklade najskôr vytvoríme neplatný Odozva objekt, ktorý sa použije neskôr v teste.

Ďalej sme nastavili Odpoveď na našu falošnú službu, takže keď doAction sa volá, zachytíme vyvolanie a chytíme argumenty metódy pomocou invocation.getArgument (1) získať Zavolaj späť argument.

Posledným krokom je vytvorenie ActionHandler a zavolaj doAction ktorý spôsobuje Odpoveď byť vyvolaný.

Ak sa chcete dozvedieť viac o metódach zametania neplatnosti, pozrite sa sem.

3. Záver

V tomto krátkom článku sme sa zaoberali dvoma rôznymi spôsobmi prístupu k testovaniu spätných volaní pri testovaní pomocou aplikácie Mockito.

Príklady sú ako vždy k dispozícii v tomto projekte GitHub.