Testing Connectivity Monitor Factory Implementation in Glide
This test suite evaluates the DefaultConnectivityMonitorFactory class in Glide, focusing on network state permission handling and monitor instantiation. It verifies the factory’s behavior in creating appropriate connectivity monitors based on Android permissions.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
bumptech/glide
library/test/src/test/java/com/bumptech/glide/manager/DefaultConnectivityMonitorFactoryTest.java
package com.bumptech.glide.manager;
import static com.bumptech.glide.RobolectricConstants.ROBOLECTRIC_SDK;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock;
import static org.robolectric.Shadows.shadowOf;
import android.app.Application;
import androidx.test.core.app.ApplicationProvider;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(sdk = ROBOLECTRIC_SDK)
public class DefaultConnectivityMonitorFactoryTest {
private ConnectivityMonitorFactory factory;
@Before
public void setUp() {
factory = new DefaultConnectivityMonitorFactory();
}
@Test
public void testReturnsDefaultConnectivityMonitorWhenHasPermission() {
shadowOf((Application) ApplicationProvider.getApplicationContext())
.grantPermissions("android.permission.ACCESS_NETWORK_STATE");
ConnectivityMonitor connectivityMonitor =
factory.build(
ApplicationProvider.getApplicationContext(),
mock(ConnectivityMonitor.ConnectivityListener.class));
assertThat(connectivityMonitor).isInstanceOf(DefaultConnectivityMonitor.class);
}
@Test
public void testReturnsNullConnectivityMonitorWhenDoesNotHavePermission() {
ConnectivityMonitor connectivityMonitor =
factory.build(
ApplicationProvider.getApplicationContext(),
mock(ConnectivityMonitor.ConnectivityListener.class));
assertThat(connectivityMonitor).isInstanceOf(NullConnectivityMonitor.class);
}
}