Skip to content

Commit 4386ecb

Browse files
Add tests for NativeAdBannerView load delegation
1 parent a82cdd8 commit 4386ecb

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,5 @@ dependencies {
107107
testImplementation libs.androidx.core.testing
108108
testImplementation libs.mockito.core
109109
testImplementation libs.mockito.inline
110+
testImplementation libs.robolectric
110111
}
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package com.d4rk.androidtutorials.java.ads.views;
2+
3+
import static org.mockito.ArgumentMatchers.any;
4+
import static org.mockito.ArgumentMatchers.eq;
5+
import static org.mockito.ArgumentMatchers.isNull;
6+
7+
import android.content.Context;
8+
import android.util.AttributeSet;
9+
10+
import com.d4rk.androidtutorials.java.R;
11+
import com.d4rk.androidtutorials.java.ads.managers.NativeAdLoader;
12+
import com.google.android.gms.ads.AdListener;
13+
import com.google.android.gms.ads.AdRequest;
14+
15+
import org.junit.Before;
16+
import org.junit.Test;
17+
import org.junit.runner.RunWith;
18+
import org.mockito.MockedStatic;
19+
import org.mockito.Mockito;
20+
import org.robolectric.Robolectric;
21+
import org.robolectric.RobolectricTestRunner;
22+
import org.robolectric.RuntimeEnvironment;
23+
24+
@RunWith(RobolectricTestRunner.class)
25+
public class NativeAdBannerViewTest {
26+
27+
private Context context;
28+
29+
@Before
30+
public void setUp() {
31+
context = RuntimeEnvironment.getApplication();
32+
}
33+
34+
@Test
35+
public void loadAd_withoutArguments_delegatesToNativeAdLoader() {
36+
NativeAdBannerView view = new NativeAdBannerView(context);
37+
38+
try (MockedStatic<NativeAdLoader> loaderMock = Mockito.mockStatic(NativeAdLoader.class)) {
39+
view.loadAd();
40+
41+
loaderMock.verify(() -> NativeAdLoader.load(
42+
eq(context),
43+
eq(view),
44+
eq(R.layout.ad_home_banner_large),
45+
any(AdRequest.class),
46+
isNull()
47+
));
48+
loaderMock.verifyNoMoreInteractions();
49+
}
50+
}
51+
52+
@Test
53+
public void loadAd_withListener_delegatesToNativeAdLoader() {
54+
NativeAdBannerView view = new NativeAdBannerView(context);
55+
AdListener listener = new AdListener() { };
56+
57+
try (MockedStatic<NativeAdLoader> loaderMock = Mockito.mockStatic(NativeAdLoader.class)) {
58+
view.loadAd(listener);
59+
60+
loaderMock.verify(() -> NativeAdLoader.load(
61+
eq(context),
62+
eq(view),
63+
eq(R.layout.ad_home_banner_large),
64+
any(AdRequest.class),
65+
eq(listener)
66+
));
67+
loaderMock.verifyNoMoreInteractions();
68+
}
69+
}
70+
71+
@Test
72+
public void loadAd_withRequest_delegatesToNativeAdLoader() {
73+
NativeAdBannerView view = new NativeAdBannerView(context);
74+
AdRequest request = new AdRequest.Builder().build();
75+
76+
try (MockedStatic<NativeAdLoader> loaderMock = Mockito.mockStatic(NativeAdLoader.class)) {
77+
view.loadAd(request);
78+
79+
loaderMock.verify(() -> NativeAdLoader.load(
80+
eq(context),
81+
eq(view),
82+
eq(R.layout.ad_home_banner_large),
83+
eq(request),
84+
isNull()
85+
));
86+
loaderMock.verifyNoMoreInteractions();
87+
}
88+
}
89+
90+
@Test
91+
public void loadAd_withRequestAndListener_delegatesToNativeAdLoader() {
92+
NativeAdBannerView view = new NativeAdBannerView(context);
93+
AdRequest request = new AdRequest.Builder().build();
94+
AdListener listener = new AdListener() { };
95+
96+
try (MockedStatic<NativeAdLoader> loaderMock = Mockito.mockStatic(NativeAdLoader.class)) {
97+
view.loadAd(request, listener);
98+
99+
loaderMock.verify(() -> NativeAdLoader.load(
100+
eq(context),
101+
eq(view),
102+
eq(R.layout.ad_home_banner_large),
103+
eq(request),
104+
eq(listener)
105+
));
106+
loaderMock.verifyNoMoreInteractions();
107+
}
108+
}
109+
110+
@Test
111+
public void constructor_withNativeAdLayoutAttribute_setsLayoutResource() {
112+
AttributeSet attrs = Robolectric.buildAttributeSet()
113+
.addAttribute(R.attr.nativeAdLayout, "@layout/ad_home_banner_small")
114+
.build();
115+
NativeAdBannerView view = new NativeAdBannerView(context, attrs);
116+
117+
try (MockedStatic<NativeAdLoader> loaderMock = Mockito.mockStatic(NativeAdLoader.class)) {
118+
view.loadAd();
119+
120+
loaderMock.verify(() -> NativeAdLoader.load(
121+
eq(context),
122+
eq(view),
123+
eq(R.layout.ad_home_banner_small),
124+
any(AdRequest.class),
125+
isNull()
126+
));
127+
loaderMock.verifyNoMoreInteractions();
128+
}
129+
}
130+
}

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ hilt = "2.57.1"
3030
room = "2.8.0"
3131
glide = "5.0.4"
3232
retrofit = "3.0.0"
33+
robolectric = "4.12.2"
3334

3435
[libraries]
3536
aboutlibraries = { module = "com.mikepenz:aboutlibraries", version.ref = "aboutlibraries" }
@@ -73,3 +74,4 @@ glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" }
7374
glide-compiler = { module = "com.github.bumptech.glide:compiler", version.ref = "glide" }
7475
retrofit2 = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
7576
retrofit2-converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
77+
robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" }

0 commit comments

Comments
 (0)