ViewModel单元测试



我有一个视图模型,只有当我在活动中订阅repo时,它才会发出repo的值。我正在尝试对视图模型进行单元测试(请参阅下面的代码(,但我得到了NPE,因为repo为null。如何对其进行单元测试?有可能吗?

class MainViewModel @ViewModelInject constructor(mainRepository: MainRepository) : ViewModel() {
val repo: LiveData<Resource<List<Repository>>> = mainRepository.getRepositories()

}
@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 testGetRepos() {
mainViewModel.repo.observeForever(mock()) /* NPE at this point as repo is null*/
verify(mainRepository).getRepositories()
}
}

创建一个类似IMainRepository的接口,让您的实际存储库类实现它

class MainRepository : IMainRepository

然后更改ViewModel构造函数以接受接口

class MainViewModel @ViewModelInject constructor(mainRepository: IMainRepository) : ViewModel()

然后创建一个Mock类来实现接口以及它应该做的

class MockMainRepository : IMainRepository

在测试中创建mock类的新实例,并将其传递给ViewModel以测试

private val mockMainRepository = MockMainRepository()
@Before
fun init() {
mainViewModel = MainViewModel(mainRepository)
}

最新更新