有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

单元测试中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) 个答案

  1. # 1 楼答案

    好的,那么。让我们从.compose方法开始。它的作用-将一些转换函数应用于您的可观察对象,您可以将其理解为“组合可观察方法的自定义序列(如mapflatMap,等等)”。也就是说,您可以使用它来组合.subscribeOn.observeOn方法(more here)。由于您使用的是RxLifecycle,因此只需转到源代码并查看what it does

    如果要在测试中使用活动的生命周期,必须使用Robolectric。它将让您完全控制创建活动和管理活动的生命周期这将有助于NPE。您只需设置它并编写:

        ActivityController controller = Robolectric.buildActivity(BaseActivity.class).create().start().resume();
    Activity activity = controller.get();
    
    // Not paused yet
    activityController.pause();
    // Pause happened! Do something!
    

    希望有帮助(: