【发布时间】:2018-06-16 02:39:09
【问题描述】:
我正在尝试测试用 Rxjava 运算符之一的回调函数编写的代码。这是我要测试的原始代码
@Override
public Observable<List<User>> getUsers() {
UserDataStore userDataStore = userDataStoreFactory.createCloudDataStore();
return userDataStore.getUsers().map(userEntityDataMapper::transform);
}
在上面的代码中有一个“map”操作符,它的回调函数会通过调用userEntityDataMapper.transform()方法将原始对象转换为另一个对象。 这里我想测试一下userEntityDataMapper的transform方法必须被调用。这是我尝试检查userEntityDataMapper.transform()方法是否调用的代码。
@Test
public void testGetUsersHappyCase() {
List<UserEntity> userEntityList = new ArrayList<>();
userEntityList.add(new UserEntity());
given(mockUserDataStore.getUsers()).willReturn(Observable.just(userEntityList));
List<User> userList = new ArrayList<>();
given(mockUserEntityDataMapper.transform(userEntityList)).willReturn(userList);
given(mockUserDataStoreFactory.createCloudDataStore()).willReturn(mockUserDataStore);
Observable observable = userDataRepository.getUsers();
verify(mockUserDataStoreFactory).createCloudDataStore();
verify(mockUserDataStore).getUsers();
TestObserver<List<UserEntity>> testObserver = new TestObserver<>();
TestScheduler testScheduler = new TestScheduler();
observable.subscribeOn(testScheduler).observeOn(testScheduler).subscribeWith(testObserver);
verify(mockUserEntityDataMapper).transform(any(List.class));
}
我在 stackoverflow 和论坛上检查了许多类似的问题,但无法为我的问题找到确切的解决方案。
更新: 这是我为解决问题所做的更改。
@Test
public void testGetUsersHappyCase() {
List<UserEntity> userEntityList = new ArrayList<>();
userEntityList.add(new UserEntity());
given(mockUserDataStore.getUsers()).willReturn(Observable.just(userEntityList));
List<User> userList = new ArrayList<>();
given(mockUserEntityDataMapper.transform(userEntityList)).willReturn(userList);
userDataRepository.getUsers().test().assertNoErrors();
verify(mockUserDataStoreFactory).createCloudDataStore();
verify(mockUserDataStore).getUsers();
verify(mockUserEntityDataMapper).transform(userEntityList);
}
感谢@tynn 提供 test() 方法的提示。我在 https://github.com/googlesamples/android-architecture-components 上的 BasicRxJavaSample 演示中也发现了同样的东西。
【问题讨论】:
-
你在日志中得到了什么?
-
那么您的问题是什么?如果此测试失败,您还会收到一条消息。请同时发布。
标签: android unit-testing mockito rx-java2