【问题标题】:Unit Test ViewModel Android单元测试 ViewModel Android
【发布时间】:2020-02-26 05:32:03
【问题描述】:

我正在做 TDD,我只是想验证在执行 viewmodel 方法时是否调用了特定的存储库方法。

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

【问题讨论】:

  • 您可以尝试添加您尝试过的任何内容。如果您了解 JUnit 的基础知识,您可以轻松完成此验证。
  • @Test public void get() { signInViewModel.get(); Mockito.verify(customerRepository.getCustomer()); }

标签: android unit-testing repository tdd viewmodel


【解决方案1】:

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

【讨论】:

  • @Inject public SignInViewModel(@NonNull CustomerRepository customerRepository) { super(); this.customerRepository = customerRepository;这样做并在测试 ne
  • 这样做并在测试中@Mock CustomerRepository customerRepository; SignInViewModel signInViewModel = new SIgnViewModel(customerRepository);得到空指针
【解决方案2】:
@Test 
public void get() { 
   signInViewModel.get(); 
   Mockito.verify(customerRepository).getCustomer(); 
}

customerRepository 应该是一个模拟。

如果您需要更多详细信息,我建议您检查一下

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 的基础知识。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多