Я пытаюсь использовать Robolectric (3.0 RC2) для написания некоторых автономных тестов для реализации SyncAdapter в приложении для Android. Приложение будет работать на телефонах с SIM-картами на фабриках, которые будут использовать Wi-Fi-соединение. Поэтому я бы хотел написать тесты против моего кода проверки подключения Wi-Fi.ShadowNetworkInfo всегда является TYPE_MOBILE при тестировании подключения WiFi с robolectric v3.0
Я написал простой тест, основанный на примерах, которые я нашел в Интернете, чтобы затенять ConnectionManager с целью имитации присутствия на Wi-Fi. Однако, несмотря на установку NetworkInfo в TYPE_WIFI, диспетчер соединений всегда возвращает тип NetworkInfo TYPE_MOBILE. Таким образом, окончательное утверждение моего testSimple терпит неудачу. Я пропустил шаг?
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());
// Assertion fails: Returns TYPE_MOBILE
assertEquals(ConnectivityManager.TYPE_WIFI, activeInfo.getType());
}
private ConnectivityManager getConnectivityManager() {
return (ConnectivityManager) RuntimeEnvironment.application.getSystemService(Context.CONNECTIVITY_SERVICE);
}
}
Очень хороший вопрос. Отметьте свой ответ правильно, так как это! –