我正在尝试为ViewModel类编写单元测试。 在这种情况下,我有一个活动,创建该活动时,它会订阅我的存储库(来自ViewModel的LiveData)并从网络或数据库中检索Github存储库的列表。
我应该在这里测试什么?我尝试编写两种测试方法:
dontFetchWithoutObservers ,失败,并显示以下内容:
[![在此处输入图片描述] [1]] [1]
fetchWhenObserved ,失败,并显示以下内容: [![在此处输入图片描述] [2]] [2]
这是我的ViewModel类:
class MainViewModel @ViewModelInject constructor(mainRepository: MainRepository) : ViewModel() {
val repo: LiveData<Resource<List<Repository>>> = mainRepository.getRepositories()
}
还有我的ViewModel测试类:
@RunWith(JUnit4::class)
class MainViewModelTest {
@Rule
@JvmField
val instantTaskExecutorRule = InstantTaskExecutorRule()
private val mainRepository = mock(MainRepository::class.java)
private lateinit var mainViewModel: MainViewModel
@Before
fun init() {
mainViewModel = MainViewModel(mainRepository)
}
@Test
fun dontFetchWithoutObservers() {
verify(mainRepository, never()).getRepositories()
}
@Test
fun fetchWhenObserved() {
mainViewModel.repo.observeForever(mock())
verify(mainRepository).getRepositories()
}
}
答案 0 :(得分:1)
您没有嘲笑getRepositories
方法,实际上得到的错误是:NPE。
提供getRepositories
方法的模拟。
`when`(mainRepository.getRepositories()).thenReturn(YourObject)
我还要去检查getRepositories
的内容,而不仅仅是验证它是否已被调用。