TodoListViewModelImpl extends BaseViewModel implements TodoListViewModel { @Override public void update(Todo todo) { for (TodoItemViewModel todoItemViewModel : mTodoItems) { if (todoItemViewModel.getTodo().equals(todo)) { todoItemViewModel.setTodo(todo); mTodoItems.set(mTodoItems.indexOf(todoItemViewModel), todoItemViewModel); break; } } } TodoListViewModelImpl(@NonNull Context mContext, @NonNull TodoRepository todoRepository,
                                 @NonNull RxUtils.SchedulerHolder schedulerHolder); @Override ObservableInt getAlertVisibility(); @Override ObservableList<TodoItemViewModel> getTodoItems(); @Override @SuppressWarnings("Anonymous2MethodRef") Observable fetchAllTodo(); @Override Observable<Todo> checkChangeItem(TodoItemViewModel todoItemViewModel); @Override void insert(Todo todo); @Override void update(Todo todo); @Override Observable<Boolean> deleteItem(int position);  }
@Test public void testUpdate() throws Exception { fetchData(); Todo todo = DataUtils.provideTodo(); todo.setId(0L); mViewModel.update(todo); assertEquals("title", mItemViewModelList.get(0).getTitle()); }
@Test public void testUpdateNotFound() throws Exception { fetchData(); Todo todo = DataUtils.provideTodo(); todo.setId(100L); mViewModel.update(todo); for (int i = 0; i < 3; i++) { assertNotEquals(Long.valueOf(100), mItemViewModelList.get(i).getTodo().getId()); assertNotEquals("title", mItemViewModelList.get(i).getTodo().getTitle()); } }