单元测试ViewModel类

时间:2020-10-22 11:04:03

标签: android kotlin junit

我正在尝试为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()
    }
}

1 个答案:

答案 0 :(得分:1)

您没有嘲笑getRepositories 方法,实际上得到的错误是:NPE。 提供getRepositories方法的模拟。

`when`(mainRepository.getRepositories()).thenReturn(YourObject)

我还要去检查getRepositories的内容,而不仅仅是验证它是否已被调用。