【问题标题】:Unit test ViewModel class单元测试 ViewModel 类
【发布时间】:2020-12-03 05:44:16
【问题描述】:

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

【问题讨论】:

    标签: android kotlin junit


    【解决方案1】:

    您不是在嘲笑getRepositories 方法,实际上您得到的错误是:NPE。 为getRepositories 方法提供一个模拟。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多