[英]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.