#java #junit #mockito
#java #юнит #мокито #junit #mockito
Вопрос:
Я пытаюсь написать недостающие тесты для плагина capacitor Android, написанного на Java, который использует библиотеку AdMob от Google.
Функция, которую я пытаюсь протестировать, имеет 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())
Часть — это то, где код ломается.
Кто-нибудь может сказать мне, что я делаю не так?
Ответ №1:
Может быть, это поможет кому-то новому в плагинах конденсаторов на 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);
}
}
}