java - Mockito.mockConstruction 不返回测试类中的模拟对象
问题描述
我正在尝试为使用 google 的 AdMob 库的用 Java 编写的电容器 android 插件编写缺少的测试。
我尝试测试的函数有一个new AdView()
调用,null
即使构造函数是用Mockito 的对象构造模拟模拟的,我也不太清楚为什么。
我尝试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 电容插件新手有所帮助。
问题是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);
}
}
}
推荐阅读
- netbeans - 为 tinylog 创建 Netbeans 代码模板
- python - 创建一个包含超过 3 个元音的所有单词(包括连字符的单词)的列表
- git - 检查远程 git 标签是否已更改
- javascript - 如何设置jQuery中图像的宽度?
- c++ - 如何检测 QWidget 的关闭按钮被按下?
- javascript - 为什么模糊事件反复触发?有时您无法关闭警报窗口
- c++ - c++ 中 arr[-1] 的奇怪行为
- python-3.x - 我正在尝试运行梯度提升分类器
- python - 尝试在 PYSPARK 中的 Nonetype 属性(null)上跳过 python UDF
- reactjs - 错误运行命令:构建脚本返回非零退出代码:1