目前正在使用 RxJava 开发 Android 应用程序。
我得到了以下代码:
public Observable<Response<DTO>> getDTO(final BaseActivity activity, final long workorderId) {
return dtoService.getDTO(DTOId)
.subscribeOn(Schedulers.io())
.compose(activity.bindUntilEvent(ActivityEvent.PAUSE))
.observeOn(AndroidSchedulers.mainThread());
}
(请不要介意对象的命名,随便取一些名字来反射(reflect)它需要做什么。)
我正在运行单元测试来测试相关的代码 fragment 。不过,这些 fragment 不包含 .compose()
方法。
现在我尝试了以下方法:
@Mock
private BaseActivity baseActivity;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
和
private BaseActivity baseActivity;
@Before
public void setup() {
baseActivity = Mock(BaseActivity.class);
}
这两种情况都给了我一个空指针:lifecycle == null
(如果我调试它就是这样)。
我如何以任何其他方式模拟或测试它? (我也不完全理解 compose() 方法。但我似乎找不到与此代码相关的任何资源)
(我提供了 Android 和 RxJava 调度器,所以这不是问题)
谢谢!
最佳答案
好的,所以。让我们从 .compose
方法开始。它的作用 - 将一些转换器函数应用于您的 Observable,您可以将其理解为 “组合可观察方法的自定义序列(如 map
、flatMap
等)” 。 IE。您可以使用它来组合 .subscribeOn
和 .observeOn
方法 ( more here )。因为你使用的是 RxLifecycle,你可以去源代码看看,what it does .
如果你想在测试中使用 Activity 的生命周期,你必须使用Robolectric .它会让您完全控制创建 Activity 和管理它的生命周期。 这将有助于 NPE。您只需设置它并编写:
ActivityController controller = Robolectric.buildActivity(BaseActivity.class).create().start().resume();
Activity activity = controller.get();
// Not paused yet
activityController.pause();
// Pause happened! Do something!
希望对你有帮助(:
关于java - 在单元测试中模拟 RxJava 的 Activity 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000251/