android - 为什么即使我显式设置了它的返回值,模拟方法仍返回 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)
}
}
为什么该属性仍然为空,我如何绕过它来测试人员列表是否被填充?
解决方案
推荐阅读
- c# - 如何在 AutoMapper 中发现将枚举映射到枚举的缺失类型映射?
- c# - 导出数据不允许换行 c#
- azure - 为什么 Maven Azure DevOps Artifacts 只存储来自 Maven Central 的依赖项?(骡软)
- mongodb - 使用 MongoStat 时,如何正确格式化连接字符串?
- apache-kafka - Kafka 源连接器:timestamp.delay.interval.ms 不添加延迟
- javascript - 如何使用 Javascript 控制 SVG 元素的位置?
- nginx - 通过 nginx 的 TLS 传递给出 SSL 证书问题
- python - 使用文本文件的 Python 海龟图形
- sql - Oracle SQL Developer 绘制散点图
- java - 获取最终的 else 语句以运行 Java 递归方法