单元测试中RxJava的java模拟活动生命周期
目前正在使用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());
}
(请不要介意对象的命名,只需输入一些随机名称以反映它需要执行的操作。)
我已经运行了单元测试来测试相关的代码片段。尽管如此,这些片段不包含.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调度器,所以这不是问题所在)
谢谢
# 1 楼答案
好的,那么。让我们从
.compose
方法开始。它的作用-将一些转换函数应用于您的可观察对象,您可以将其理解为“组合可观察方法的自定义序列(如map
,flatMap
,等等)”。也就是说,您可以使用它来组合.subscribeOn
和.observeOn
方法(more here)。由于您使用的是RxLifecycle,因此只需转到源代码并查看what it does如果要在测试中使用活动的生命周期,必须使用Robolectric。它将让您完全控制创建活动和管理活动的生命周期这将有助于NPE。您只需设置它并编写:
希望有帮助(: