package Ġcom . m ct ech . show case . architecture ĊĊ Ċ import Ġcom . m ct ech . testing . architecture . Base ViewModel Test Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . spy Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . times Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ open Ġclass ĠBase ViewModel Ar q Test Ġ: ĠBase ViewModel Test () Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġbase ViewModel : ĠBase ViewModel ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġ` before Ġeach Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġbase ViewModel Ġ= Ġspy ( Base ViewModel ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġadd Ġinteraction Ġon Ġstack `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase ViewModel . interact ( Mock Interaction . No Param Interaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( base ViewModel ). sus pended Interaction ( Mock Interaction . No Param Interaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġretry Ġlast Ġinteraction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠMock Interaction . Param Interaction ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase ViewModel . interact ( Mock Interaction . No Param Interaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase ViewModel . interact ( expected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase ViewModel . re process Last Interaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( base ViewModel , Ġtimes ( 2 )). handle User Interaction ( expected ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase ViewModel . interact ( Mock Interaction . No Param Interaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase ViewModel . re process Last Interaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( base ViewModel , Ġtimes ( 3 )). handle User Interaction ( Mock Interaction . No Param Interaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ sealed Ġclass ĠMock Interaction Ġ: ĠUser Interaction Ġ{ ĊĠĠĠ Ġobject ĠNo Param Interaction Ġ: ĠMock Interaction () ĊĠĠĠ Ġdata Ġclass ĠParam Interaction ( val Ġfoo : ĠString ) Ġ: ĠMock Interaction () Ċ }