首页 > 解决方案 > 为什么即使我显式设置了它的返回值,模拟方法仍返回 null?

问题描述

应该返回 LiveData 的方法在 junit 测试期间返回 null。

我有以下类和接口:

class PersonListViewModel(personRepository: PersonRepository): ViewModel() {

    val personList: LiveData<List<Person>> = personRepository.getPersonList()
}

interface PersonRepository {
    fun getPersonList(): LiveData<List<Person>>
}

class PersonListViewModelTest {

    @get:Rule
    var rule: TestRule = InstantTaskExecutorRule()

    @Mock
    private lateinit var personListObserver: Observer<List<Person>>
    @Mock
    private lateinit var personRepository: PersonRepository

    private lateinit var viewModel: PersonListViewModel

    @Before
    fun setup() {
        MockitoAnnotations.initMocks(this)
        viewModel = PersonListViewModel(personRepository)

        val personList = listOf(Person("id1"), Person("id2"))
        val personListLiveData = MutableLiveData<List<Person>>()
        personListLiveData.postValue(personList)

        `when`(personRepository.getPersonList()).thenReturn(personListLiveData)

        //NullPointerException thrown here, personList is null
        viewModel.personList.observeForever(personListObserver) 
    }

    @Test
    fun testPersonListPopulates() {
        assertEquals(2, viewModel.personList.value?.size ?: 0)
    }
}

为什么该属性仍然为空,我如何绕过它来测试人员列表是否被填充?

标签: androidjunitmockitoviewmodelandroid-livedata

解决方案


推荐阅读