Модульное тестирование значения LiveData с сопрограммами - PullRequest
0 голосов
/ 21 января 2020

Я хочу проверить, имеет ли переменная viewmodel возвращаемое значение вызова репозитория. Я впервые использую сопрограммы.

Проблема здесь в том, что моя переменная события возвращает здесь нуль:

Assert.assertEquals (viewModel.event.getOrAwaitValue (), EventGame (games = games))

Моя viewModel:

class GamesViewModel(private val repository: GameRepository) : ViewModel(), CoroutineScope {
    override val coroutineContext: CoroutineContext =
        Dispatchers.Main + SupervisorJob()

    private val _event = MutableLiveData<EventGame>()
    val event: LiveData<EventGame> get() = _event


    fun listGames() = this.launch {
        val ej = withContext(Dispatchers.Default) {
            repository.listGames()
        }
        _event.postValue(ej)
    }
}

Мой тестовый класс

class GamesUnitTest : KoinTest{
    lateinit var viewModel: GameViewModel

    private val g1 = Game(id = 1, data = "01/01/2020 18:35" ...)
    private val g2 = Game(id = 2, data = "01/10/2020 18:35"...)
    private val games = listOf(g1, g2)

    @Mock
    lateinit var repository: GameRepository

    @get:Rule
    var coroutinesTestRule = CoroutinesTestRule()

    @get:Rule
    val instantExecutorRule = InstantTaskExecutorRule()

    @Mock
    lateinit var observer: Observer<EventGame>

    @After
    fun after() {
        stopKoin()
    }

    @Before
    fun before() {
        MockitoAnnotations.initMocks(this)
        viewModel = GameViewModel(repository)
    }

    @Test
    fun testListOfGames() = runBlockingTest{
        Mockito.`when`(repository.listGames()).thenReturn(EventGame(games = games))
        viewModel.event.observeForever(observer)
        viewModel.listGames()
        Assert.assertEquals(viewModel.event.getOrAwaitValue(), EventGame(games = games))

    }
}

- Edit2

Я удалил GlobalScope.launch {}. Событие все еще имеет значение

Я не уверен, как это исправить.

1 Ответ

0 голосов
/ 21 января 2020

Моя проблема была в моём мокито. Это возвращалось ноль. Когда я использовал Mockito- Kotlin, он работал нормально.

source: Функция Mocked Suspend возвращает ноль в Mockito

...