gpt4 book ai didi

android - 测试rxjava回调函数

转载 作者:行者123 更新时间:2023-11-29 19:03:12 25 4
gpt4 key购买 nike

我正在尝试测试用 Rxjava 运算符之一的回调函数编写的代码。这是我要测试的原始代码

@Override
public Observable<List<User>> getUsers() {
UserDataStore userDataStore = userDataStoreFactory.createCloudDataStore();
return userDataStore.getUsers().map(userEntityDataMapper::transform);
}

在上面的代码中有一个“映射”运算符,它的回调函数将通过调用 userEntityDataMapper.transform() 方法将原始对象转换为另一个对象。 这里我想测试是否必须调用 userEntityDataMapper 的转换方法。这是我尝试检查 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 演示中也发现了同样的东西.

最佳答案

您必须订阅流才能执行它。这可以像调用 test() 一样容易地完成。在可观察的。这将为您提供一个 TestObserver

除此之外,您没有任何理由使用 TestScheduler。在您的情况下,这实际上是问题所在。您没有调用 triggerActions(),因此您的流根本没有执行。

如果您不修改正在测试的代码中的任何调度程序,那么在您的测试中也忽略这些。如果需要更改它,最好创建一个规则来设置 Schedulers每个同步版本。您可以使用 RxJavaPlugins 找到此 setter 类。

关于android - 测试rxjava回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48127910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com