package Ġdev . east ar . main Ċ Ċ import Ġandroid . log . Log Ċ import Ġandroid . util .* Ċ import Ġdev . east ar . repository . Game Repository Ċ import Ġdev . east ar . use case . Try Number UseCase Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . hamcrest . Core Matchers Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . hamcrest . core . Is .` is ` Ċ import Ġorg . junit . jupiter . api .* Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġorg . junit . jupiter . api . extension . Register Extension Ċ import Ġorg . mockito . Mockito ĊĊ Ċ @ Experimental Cor outines Api Ċ @ Extend With ( Instant Executor Extension :: class ) Ċ class ĠMulti ViewModel Coroutine Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtry Number UseCase : ĠTry Number UseCase ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġ@ Register Extension ĊĠĠĠĠĠĠĠ Ġval Ġcoroutine Extension Ġ= ĠMain Coroutine Extension () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" start Ġ- ĠsetUp ") ĊĠĠĠĠĠĠĠ Ġval Ġgame Repository : ĠGame Repository Ġby Ġlazy Ġ{ Ġmock () Ġ} ĊĠĠĠĠĠĠĠ Ġwhenever ( game Repository . generate Random Number ()). thenReturn ( 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( game Repository . generate Random Number (), ĠCore Matchers .` is `( 5 )) ĊĠĠĠĠĠĠĠ Ġ// https :// ve log . io /@ dn js ck sd n 9 8 / JUnit - Mockito - Verify - Method - Calls ĊĠĠĠĠĠĠĠ ĠMockito . verify ( game Repository , ĠMockito . times ( 1 )). generate Random Number () ĊĠĠĠĠĠĠĠ Ġtry Number UseCase Ġ= ĠTry Number UseCase ( game Repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e (" start Ġ- ĠtearDown ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ DisplayName (" Multi ìĹĲìĦľ Ġìŀħëł¥ ë° Ľ ìĿĢ ìľł ìłĢ ê°Ģ 1 ëªħ ìĿ´ ë©´ Ġ 2 ëªħ ìĿ´ ìĥģ íķ Ħ ìļĶ íķĺëĭ¤ ìļĶ ì²Ń íķľëĭ¤ ") ĊĠĠĠ Ġfun Ġset Members Async () Ġ= Ġcoroutine Extension . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . e ("\ t start Ġ- Ġset Members Async Test ") ĊĠĠĠĠĠĠĠ Ġ// given ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠMulti ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Number UseCase , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// coroutine Extension , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . members . observe Fore ver Ġ{} ĊĠĠĠĠĠĠĠ ĠviewModel . member Input . observe Fore ver Ġ{} ĊĠĠĠĠĠĠĠ ĠviewModel . members 1 Player . observe Fore ver Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ// when ĊĠĠĠĠĠĠĠ ĠLog . e ("\ t start Ġ- ĠviewModel . set Members Async (\" ìĦ± ì¶ ĺ íĸ¥ \") ") ĊĠĠĠĠĠĠĠ ĠviewModel . set Members Async (" ìĦ± ì¶ ĺ íĸ¥ ") ĊĠĠĠĠĠĠĠ ĠLog . e ("\ t end Ġ- ĠviewModel . set Members Async (\" ìĦ± ì¶ ĺ íĸ¥ \") ") ĊĠĠĠĠĠĠĠ ĠLog . e ("\ t start Ġ- Ġadvance Until Idle ") ĊĠĠĠĠĠĠĠ Ġcoroutine Extension . advance Until Idle () ĊĠĠĠĠĠĠĠ ĠLog . e ("\ t end Ġ- Ġadvance Until Idle ") ĊĊĠĠĠĠĠĠĠ Ġ// then ĊĠĠĠĠĠĠĠ Ġassert All ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠviewModel . members . value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual , ĠCore Matchers .` is `( array Of (" ìĦ± ì¶ ĺ íĸ¥ "))) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠviewModel . member Input . value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual , ĠCore Matchers .` is `( Unit )) ĊĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠviewModel . members 1 Player . value ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( actual , Ġ` is ` (" ë© Ģ íĭ° Ġê² Į ìŀĦ ìĹĲìĦľëĬĶ Ġ 2 ëªħ ĠìĿ´ ìĥģ ìĿĺ Ġplayer ê°Ģ ĠíķĦìļĶ íķ©ëĭĪëĭ¤ .")) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠLog . e ("\ t end Ġ- Ġset Members Async Test ") ĊĠĠĠ Ġ} ĊĊ Ċ } ĊĊ