单元测试视图模型Android



我正在进行TDD,我只想验证在执行视图模型方法时是否调用了特定的存储库方法。

class SignInViewModel{
CustomerRepository customerRepository;
public void get(){
customerRepository.getCustomer();
}
}

尝试通过视图模型构造函数注入存储库实例。在模拟测试类中的存储库实例并验证是否调用了get((方法之后,将调用存储库的getCustomer((。

@Test 
public void get() { 
signInViewModel.get(); 
Mockito.verify(customerRepository).getCustomer(); 
}

customerRepository应该是一个mock。

如果你需要更多的细节,我建议你看看

https://github.com/android/architecture-samples/blob/dev-todo-mvvm-live/todoapp/app/src/test/java/com/example/android/architecture/blueprints/todoapp/addedittask/AddEditTaskViewModelTest.java

在上面的TestSample中使用了Mockito验证。您还可以看到存储库是如何被嘲笑的。如果你得到了一个NPE,你可能没有嘲笑你的存储库,或者你没有在测试中创建你的viewModel。如果你仍然不清楚,我建议你学习Junit和Mockito的基础知识。

首先尝试在viewModel的构造函数上注入CustomerRepository,如下所示:

class SignInViewModel{
private CustomerRepository customerRepository;
public SignInViewModel(CustomerRepository customerRepository){
this.customerRepository = customerRepository ;
}
public void get(){
customerRepository.getCustomer();
}
}

在您的测试文件中,您也可以模拟存储库:

@Test 
public void get() { 
CustomerRepository mocked = new Mockk<CustomerRepository)()
SignInViewModel signInViewModel = new SignInViewModel(mocked)
signInViewModel.get(); 
Mockito.verify(customerRepository).getCustomer();
}

最新更新