繁体   English   中英

Mockito.mockConstruction 不返回测试类中的模拟对象

[英]Mockito.mockConstruction does not return the mocked object in the tested class

我正在尝试为使用 google 的 AdMob 库的 Java 编写的电容器 android 插件编写缺少的测试。

我试图测试的函数有一个new AdView()调用,即使构造函数被Mockito 的对象构造模拟模拟,它也返回null ,我不太确定为什么。

我尝试在测试威胁中创建一个新的AdView并且它有效。

这是当前的测试(它还没有任何断言,因为我只是想通过视图创建:

    @Test
    public void npa_requests_for_banner_when_specified_inside_options() {
        sut = new AdMob();
        try (MockedStatic<AdOptions> adOptionsStaticMocked = Mockito.mockStatic(AdOptions.class)) {
            adOptionsStaticMocked.when(AdOptions::getFactory).thenReturn(adOptionsFactoryMock);
            
            try (MockedConstruction<AdView> adViewMocked = Mockito.mockConstruction(AdView.class)) {
                Context mockedContext = mock(Context.class);
                AdView adView = new AdView(mockedContext);


                sut.showBanner(pluginCallMock);
            }
        }
    }

showBanner相关代码:

  @PluginMethod
  public void showBanner(PluginCall call) {

    if (mAdView != null) {
      return;
    }

    final AdOptions adOptions = AdOptions
      .getFactory()
      .createBannerOptions(call);

    setTestDevicesIfNeeded(adOptions.isTesting);

    try {
      mAdView = new AdView(getContext()); // THIS BREAKS! NO MOCK IS RETURNED
      mAdView.setAdSize(adOptions.adSize.size);
        
      mAdViewLayout = new RelativeLayout(getContext());
      mAdViewLayout.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
      mAdViewLayout.setVerticalGravity(Gravity.BOTTOM);

      // More Code here...
    } catch (Exception ex) {
      call.error(ex.getLocalizedMessage(), ex);
    }
  }

mAdView = new AdView(getContext())部分是代码中断的地方。

有谁可以告诉我我做错了什么?

也许这有助于像我这样的 Java Capacitor 插件新手。

问题是getContext()返回 null ......我所做的是:

    @Test
    public void npa_requests_for_banner_when_specified_inside_options() {
        sut = new AdMob() {
            @Override
            public Context getContext() {
                return mockedContext;
            }
        };
        try (MockedStatic<AdOptions> adOptionsStaticMocked = Mockito.mockStatic(AdOptions.class)) {
            adOptionsStaticMocked.when(AdOptions::getFactory).thenReturn(adOptionsFactoryMock);
            
            try (MockedConstruction<AdView> adViewMocked = Mockito.mockConstruction(AdView.class)) {
                Context mockedContext = mock(Context.class);
                AdView adView = new AdView(mockedContext);


                sut.showBanner(pluginCallMock);
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM