Created a Robolectric unit test replacement for the NearbyActivity test.

This commit is contained in:
Paul Hawke 2017-11-29 21:29:09 -06:00
parent 9a5bff42d0
commit ce32505ca3
11 changed files with 100 additions and 39 deletions

View file

@ -58,6 +58,7 @@ dependencies {
testImplementation 'junit:junit:4.12'
testImplementation 'org.robolectric:robolectric:3.4'
testImplementation 'org.mockito:mockito-all:1.10.19'
testImplementation 'com.squareup.okhttp3:mockwebserver:3.8.1'
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.8.1'

View file

@ -1,30 +0,0 @@
package fr.free.nrw.commons;
import android.support.test.espresso.assertion.ViewAssertions;
import android.support.test.filters.LargeTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import fr.free.nrw.commons.nearby.NearbyActivity;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class NearbyActivityTest {
@Rule
public final ActivityTestRule<NearbyActivity> nearby =
new ActivityTestRule<>(NearbyActivity.class);
@Test
public void testActivityLaunch() {
onView(withText(R.string.title_activity_nearby))
.check(ViewAssertions.matches(isDisplayed()));
}
}

View file

@ -29,6 +29,7 @@ import java.io.IOException;
import javax.inject.Inject;
import dagger.android.AndroidInjector;
import dagger.android.DispatchingAndroidInjector;
import dagger.android.HasActivityInjector;
import fr.free.nrw.commons.auth.AccountUtil;
@ -272,7 +273,7 @@ public class CommonsApplication extends Application implements HasActivityInject
}
@Override
public DispatchingAndroidInjector<Activity> activityInjector() {
public AndroidInjector<Activity> activityInjector() {
return dispatchingActivityInjector;
}

View file

@ -338,7 +338,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
Fragment fragment = new NearbyMapFragment();
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.container, fragment);
fragmentTransaction.replace(R.id.container, fragment, fragment.getClass().getSimpleName());
fragmentTransaction.commitAllowingStateLoss();
}
@ -349,7 +349,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
Fragment fragment = new NearbyListFragment();
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.container, fragment);
fragmentTransaction.replace(R.id.container, fragment, fragment.getClass().getSimpleName());
fragmentTransaction.commitAllowingStateLoss();
}

View file

@ -9,7 +9,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Config(constants = BuildConfig.class, sdk = 21, application = TestCommonsApplication.class)
public class MediaTest {
@Test
public void displayTitleShouldStripExtension() {

View file

@ -18,7 +18,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Config(constants = BuildConfig.class, sdk = 21, application = TestCommonsApplication.class)
public class NearbyControllerTest {
@Test

View file

@ -11,7 +11,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Config(constants = BuildConfig.class, sdk = 21, application = TestCommonsApplication.class)
public class PageTitleTest {
@Test
public void displayTextShouldNotBeUnderscored() {

View file

@ -1,12 +1,40 @@
package fr.free.nrw.commons;
import android.app.Activity;
import com.squareup.leakcanary.RefWatcher;
// This class is automatically discovered by Robolectric
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import dagger.android.AndroidInjector;
import fr.free.nrw.commons.nearby.NearbyPlaces;
public class TestCommonsApplication extends CommonsApplication {
@Mock
private AndroidInjector<Activity> mockInjector;
@Mock
private NearbyPlaces mockNearbyPlaces;
@Override
public void onCreate() {
super.onCreate();
MockitoAnnotations.initMocks(this);
}
@Override
protected RefWatcher setupLeakCanary() {
// No leakcanary in unit tests.
return RefWatcher.DISABLED;
}
@Override
public AndroidInjector<Activity> activityInjector() {
return mockInjector;
}
@Override
public synchronized NearbyPlaces getNearbyPlaces() {
return mockNearbyPlaces;
}
}

View file

@ -17,6 +17,7 @@ import java.util.Map;
import java.util.Set;
import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.TestCommonsApplication;
import io.reactivex.observers.TestObserver;
import okhttp3.HttpUrl;
import okhttp3.mockwebserver.MockResponse;
@ -28,7 +29,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Config(constants = BuildConfig.class, sdk = 21, application = TestCommonsApplication.class)
public class ApacheHttpClientMediaWikiApiTest {
private ApacheHttpClientMediaWikiApi testObject;

View file

@ -0,0 +1,59 @@
package fr.free.nrw.commons.nearby;
import android.app.Activity;
import android.support.v4.app.Fragment;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.android.controller.ActivityController;
import org.robolectric.annotation.Config;
import dagger.android.AndroidInjector;
import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.TestCommonsApplication;
import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.location.LocationServiceManager;
import static junit.framework.Assert.assertNotNull;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, application = TestCommonsApplication.class)
public class NearbyActivityTest {
private static final LatLng ST_LOUIS_MO_LAT_LNG = new LatLng(38.627003, -90.199402, 0);
@Mock
LocationServiceManager mockLocationManager;
private ActivityController<NearbyActivity> activityController;
private NearbyActivity nearbyActivity;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
AndroidInjector<Activity> injector = ((TestCommonsApplication) RuntimeEnvironment.application).activityInjector();
Mockito.doNothing().when(injector).inject(isA(NearbyActivity.class));
when(mockLocationManager.getLastLocation()).thenReturn(ST_LOUIS_MO_LAT_LNG);
activityController = Robolectric.buildActivity(NearbyActivity.class);
nearbyActivity = activityController.get();
nearbyActivity.locationManager = mockLocationManager;
}
@Test
public void activityLaunchesAndShowsList() {
activityController.create().resume().visible();
assertNotNull(nearbyActivity.getSupportFragmentManager().findFragmentByTag("NearbyListFragment"));
}
}

View file

@ -20,13 +20,14 @@ import java.util.Collections;
import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.TestCommonsApplication;
import fr.free.nrw.commons.location.LatLng;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Config(constants = BuildConfig.class, sdk = 21, application = TestCommonsApplication.class)
public class NearbyAdapterFactoryTest {
private static final Place PLACE = new Place("name", Place.Description.AIRPORT,