I am trying to use Robolectric (3.0 RC2) to write some standalone tests to implement the SyncAdapter in an Android application. The application will work on phones with SIM cards in factories that will use a Wi-Fi connection. Therefore, I would like to write tests against my Wi-Fi connection verification code.
I wrote a simple test based on examples I found on the Internet to obscure the ConnectionManager to simulate presence on Wi-Fi. However, despite setting NetworkInfo to TYPE_WIFI, the connection manager always returns the NetworkInfo type TYPE_MOBILE. Thus, the final statement of my testSimple fails. Am I missing a step?
import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import test.app.BuildConfig; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.Shadows; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowConnectivityManager; import org.robolectric.shadows.ShadowNetworkInfo; import java.io.IOException; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, manifest = "/src/main/AndroidManifest.xml") public class DownloadSyncAdapterTest { private ConnectivityManager connectivityManager; private ShadowConnectivityManager shadowConnectivityManager; private ShadowNetworkInfo shadowOfActiveNetworkInfo; @Before public void setUp() throws IOException { connectivityManager = getConnectivityManager(); shadowConnectivityManager = Shadows.shadowOf(connectivityManager); shadowOfActiveNetworkInfo = Shadows.shadowOf(connectivityManager.getActiveNetworkInfo()); } @Test public void testSimple() { NetworkInfo networkInfo = ShadowNetworkInfo.newInstance(NetworkInfo.DetailedState.CONNECTED, ConnectivityManager.TYPE_WIFI, 0, true, true); shadowConnectivityManager.setNetworkInfo(ConnectivityManager.TYPE_WIFI, networkInfo); NetworkInfo activeInfo = connectivityManager.getActiveNetworkInfo(); assertTrue(activeInfo != null && activeInfo.isConnected());
source share