package Ġcom . dam ak able . kotlin news . model Ċ Ċ import Ġcom . dam ak able . kotlin news . api . News feed Service Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . Test Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . test . reset Main Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġkotlinx . coroutines . test . set Main Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ import Ġretrofit 2 . Response Ċ Ċ @ Experimental Cor outines Api Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠNews feed Provider Test Ġ{ ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġnews feed Service : ĠNews feed Service ĊĊĠĠĠ Ġprivate Ġval Ġtest Dispatcher Ġ= ĠTest Coroutine Dispatcher () ĊĊĠĠĠ Ġprivate Ġval Ġnews feed Ġ= ĠNews feed (" feed ", ĊĠĠĠĠĠĠĠ ĠNews feed Data (" after ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMutable List ( 1 ) Ġ{ Ġi Ġ-> ĠNews Item (" t 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNews Item Data ( i . toString (), Ġ" self text ", Ġ" thumbnail ")) ĊĠĠĠĠĠĠĠ Ġ})) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . set Main ( test Dispatcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . reset Main () ĊĠĠĠĠĠĠĠ Ġtest Dispatcher . cleanup Test Cor outines () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` request Feed Ġprovides ĠNews feed Ġto Ġcallback Ġon Ġsuccess `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( news feed Service . get News feed ()). thenReturn ( Response . success ( news feed )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġpass Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠNews feed Provider ( news feed Service ). request Feed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" feed ", Ġit . kind ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġverify ( news feed Service ). get News feed () ĊĠĠĠĠĠĠĠ ĠassertTrue ( pass ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġ` request Feed Ġprovides ĠException Ġto Ġcallback Ġon Ġfailure `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( news feed Service . get News feed ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Response . error ( 4 0 4 , Ġmock ( ResponseBody :: class . java ))) ĊĊĠĠĠĠĠĠĠ Ġvar Ġpass Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠNews feed Provider ( news feed Service ). request Feed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġverify ( news feed Service ). get News feed () ĊĠĠĠĠĠĠĠ ĠassertTrue ( pass ) ĊĠĠĠ Ġ} Ċ } Ċ