Mockito theReturn无法正常工作



我对Mockito有问题。我正在嘲笑一个课程,然后使用thenReturn()的方法。但是似乎出现了问题。这是代码。

testcode:

 public void getCardsTest() {
    FeatureFragmentPresenterImpl presenter = new FeatureFragmentPresenterImpl();
    GroupFeatureData data = Mockito.mock(GroupFeatureData.class);
    FeatureFragmentView view = Mockito.mock(FeatureFragmentView.class);
    presenter.init(view, data);
    Observable<Response<ResponseBody>> errorObservable = Observable.error(new IOException());
    assertNotNull(observable);
    Mockito.when(data.getCards(Mockito.anyString(), Mockito.anyString(),
            Mockito.anyInt(), Mockito.anyInt())).
            thenReturn(errorObservable);
    presenter.getAllCards(new Contact(new Name("ssd")), -1);     
}

主持人代码:

public void getAllCards(IContact iContact, int lastIndex) {
    Observable<Response<ResponseBody>> allCardsResponseObservable = mGroupFeatureData.getCards(path, id, 10, lastIndex);
    allCardsResponseObservable
            .subscribeOn(Schedulers.io()) -------> Test Failing because NPE here
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new DisposableObserver<Response<ResponseBody>>() {
                @Override
                public void onNext(@NonNull Response<ResponseBody> response) {
                }
                @Override
                public void onError(@NonNull Throwable e) {
                }
                @Override
                public void onComplete() {
            });
}
  public void init(FeatureFragmentView featureFragmentView,
                  GroupFeatureData groupFeatureData) {
    this.mGroupFeatureData = groupFeatureData;
    this.mFeatureFragmentView = featureFragmentView;
}

即使我在测试中嘲笑data.getCards()的响应,在主持人中,它正在投掷NPE,而它应该仅在可观察到的errorObservable的模拟可观察的操作中进行操作。这里出了什么问题?

NPE告诉我们这一行:

mGroupFeatureData.getCards(path, id, 10, lastIndex);

...返回null,这意味着您在此处模拟的实际方法调用和方法呼叫...

Mockito.when(data.getCards(Mockito.anyString(), Mockito.anyString(),
        Mockito.anyInt(), Mockito.anyInt())).
        thenReturn(errorObservable);

...不匹配。提供的代码显示此实际调用:

Observable<Response<ResponseBody>> allCardsResponseObservable = 
    mGroupFeatureData.getCards(path, id, 10, lastIndex);

打破此通话,我们可以说:

  • 第三个参数10是一个INT,因此这将匹配给定参数匹配器:Mockito.anyInt()
  • 第四个参数 lastIndex被声明为int,因此这将与给定的参数匹配器匹配: Mockito.anyInt()
  • 从您的代码提取物中尚不清楚第一个和第二个论点的 type ,因为我们看不到 pathid在哪里声明,但是除非它们是 type of type String然后给定的参数的给定参数匹配器(Mockito.anyString())将不匹配,因此模拟的调用将返回null

因此,在我看来,它看起来像path中的一个或另一个id实际上不是String类型。如果您可以更新问题以显示这些类型的声明位置,那将是有用的。

相关内容

  • 没有找到相关文章

最新更新