@RunWith(JUnit4::class) class MainViewModelTest { @Rule @JvmField val instantTaskExecutorRule = InstantTaskExecutorRule() @Mock lateinit var repo: GithubRepository @Mock lateinit var githubApi: GithubApi @Mock lateinit var application: TrendingApp lateinit var viewModel: MainViewModel @Mock lateinit var dataObserver: Observer>>> @Mock lateinit var loadingObserver: Observer private val threadContext = newSingleThreadContext("UI thread") private val trendingList : List = listOf() @Before fun setUp() { MockitoAnnotations.initMocks(this) Dispatchers.setMain(threadContext) viewModel = MainViewModel(application, repo) } ` ` @test fun test_TrendingRepo_whenSuccess() { //Assemble Mockito.when`(githubApi.getTrendingListAsync(“java”, “daily”))` .thenAnswer{ return@thenAnswer trendingList.toDeferred() } //Act viewModel.trendingLiveData.observeForever(dataObserver) viewModel.loadingState.observeForever(loadingObserver) viewModel.getTrendingData("java", "daily") //Verify verify(loadingObserver).onChanged(true) verify(dataObserver).onChanged(Event(DataState.Success(trendingList))) verify(loadingObserver).onChanged(false) } @After fun tearDown() { Dispatchers.resetMain() threadContext.close() } }