代码之家  ›  专栏  ›  技术社区  ›  Jepoy

为什么视图方法不会在单元测试的演示者内部的可观察对象中被调用?

  •  0
  • Jepoy  · 技术社区  · 6 年前

    我是Android单元测试的新手,目前我们使用的是MVP+RxJava+Dagger 2。我编写的这个测试在单元测试中失败,但在生产代码中有效:

    @Override
    public void retrieveListOfBillers() {
        getMvpView().showLoading();
        getCompositeDisposable().add(
            getDataManager()
                .doServerGetBillersList()
                .observeOn(getSchedulerProvider().ui())
                .subscribeOn(getSchedulerProvider().io())
                .subscribe( response ->{
                    for (Datum data : response.getData()) {
                        getMvpView().setUpRecyclerView(enrollmentBillers);
                        getMvpView().showDefaultViews();
                        getMvpView().hideLoading();
                    }, throwable -> {
                        ...
    

    我在测试中就是这样做的:

    @Test
    public void testGetListOfBillersCallsSetupRecyclerView(){
        mPresenter.retrieveListOfBillers();
        verify(mView).showLoading();
        verify(mView).setUpRecyclerView(anyList());
    }
    

    @Before
    public void setUp() {
        // Mockito has a very convenient way to inject mocks by using the @Mock annotation. To
        // inject the mocks in the test the initMocks method needs to be called.
        MockitoAnnotations.initMocks(this);
        CompositeDisposable compositeDisposable = new CompositeDisposable();
        mTestScheduler = new TestScheduler();
        testSchedulerProvider = new TestSchedulerProvider(mTestScheduler);
        mPresenter = new CreateBillerContactPresenter<>(
                dataManager,
                testSchedulerProvider,
                compositeDisposable
        );
        mPresenter.onAttach(mView);
    
    
    when(dataManager.doServerGetBillersList()).thenReturn(Observable.just(getBillerListResponse));
    

    我相信这与TestScheduler有关,但我需要一个真正知道这里的问题是什么的人,这就是为什么我的测试代码无法调用setupRecyclerView,以及来自演示者的其他预期视图方法调用的原因?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jepoy    6 年前

    我找到了答案: TestScheduler类似乎有一个triggerAction方法,其中:

    然后presenter/datamanager按预期调用视图方法。