Intereting Posts
Android Facebook SDK – Не удалось получить токен доступа Android / Java-библиотеки Можно ли создать фиксированную ширину в XML? Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare () внутри AsyncTask для ProgressDialog Как настроить плагин ButterKnife в Android Studio? Служба определения местоположения подразделения ActionBarSherlock Значок товара странная ширина с Android 4.3 Есть ли какие-либо преимущества для перехода на Otto из событий Broadcast Android SearchView OnFocusChangeListener: onFocusChange не вызывается вообще Как добавить приложение Pre-loader / Startup screen / Splash Screen в приложение My PhoneGap для Android Как показать Диалог на Android, используя эффект раскрытия от материального дизайна? Каковы наилучшие методы создания приложения чата в android Android: Не удалось найти com.android.support:support-v4:23.2.1 Android Cordova 5.0+ сбой в работе камеры Как получить доступ к второму микрофонному андроиду, например Galaxy 3

Модульное тестирование на Android Studio: ошибка «не издеваться»

Я новичок в Android Studio. Я использую Android Studio 1.2 preview 2, gradle 2.2.1 и плагин gradle 1.1.0.

Я не могу обойти эту ошибку при попытке выполнить мои модульные тесты:

java.lang.RuntimeException: Method getInstrumentation in android.test.InstrumentationTestCase not mocked 

Это мой тестовый класс:

 public class AppPreferencesTest extends InstrumentationTestCase { AppPreferences preferences; @Before public void setUp() throws Exception { preferences = new AppPreferences(getInstrumentation().getTargetContext()); } ... 

В моем build.gradle:

 testCompile 'junit:junit:4.12' 

Я попытался добавить это

 testOptions { unitTests.returnDefaultValues = true } 

Потому что это было упомянуто в шагах, которые я выполнил по адресу http://tools.android.com/tech-docs/unit-testing-support, но это не исправляет.

Я также попытался создать MockContext:

 preferences = new AppPreferences(new MockContext()); 

Но конструктор AppPreferences, чем дает ошибку

 public AppPreferences(Context context) { preferences = PreferenceManager.getDefaultSharedPreferences( context); } 

 RuntimeException: Method getDefaultSharedPreferences in android.preference.PreferenceManager not mocked. 

Solutions Collecting From Web of "Модульное тестирование на Android Studio: ошибка «не издеваться»"

Я вижу, вы обновили свой вопрос.

Пожалуйста, взгляните на источник этого SharedPreferencesMockContext.java : https://github.com/applicake/Beandroid/blob/master/Beanstalk%20Android%20ClientTest/src/com/applicake/beanstalkclient/test/SharedPreferencesMockContext.java .

Вот тест: https://github.com/applicake/Beandroid/blob/master/Beanstalk%20Android%20ClientTest/src/com/applicake/beanstalkclient/test/NotificationsTests.java

Вот демонстрация того, как они создали свой макет:

  @Override protected void setUp() throws Exception { final SharedPreferencesMockContext mockContext = new SharedPreferencesMockContext(getContext()); MockApplication mockApplication = new MockApplication(){ @Override public Context getApplicationContext() { Log.d("tests", "Im here"); return mockContext; } }; context = mockContext; setApplication(mockApplication); prefs = PreferenceManager.getDefaultSharedPreferences(context); prefs.edit().clear().commit(); super.setUp(); } 

Прошлой ночью я столкнулся с этой ошибкой. Попробуйте использовать « MockContext ».

 public class AppPreferencesTest extends InstrumentationTestCase { AppPreferences preferences; Context context; @Before public void setUp() throws Exception { context = new MockContext(); preferences = new AppPreferences(context); } 

См. Другие примеры здесь: https://stackoverflow.com/a/29063736/950427

Я не мог получить тесты Instrumentation для работы, используя Android Studio, я думаю, они все еще завершают реализацию. И так как для эмулятора требуется запустить, есть более быстрые опции: регулярные модульные тесты.

Благодаря советам Джареда, я переключился на Robolectric, который прост в использовании на Android Studio.

 androidTestCompile 'junit:junit:4.12' androidTestCompile "org.robolectric:robolectric:3.0" 

а также

 import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.RobolectricTestRunner; import static junit.framework.TestCase.assertEquals; @RunWith(RobolectricTestRunner.class) public class AppPreferencesTest { AppPreferences preferences; @Before public void setUp() throws Exception { preferences = new AppPreferences(RuntimeEnvironment.application.getApplicationContext()); } @Test public void testIsNotificationsEnabled_Default() throws Exception { assertEquals(true, preferences.isNotificationsEnabled()); } ... 

В настоящее время информация здесь правильная: http://nenick-android.blogspot.nl/2015/02/android-studio-110-beta-4-and.html Но, вероятно, в ближайшем будущем, скорее всего, Поскольку вся информация, которую я нашел по этому вопросу, с помощью Google уже устарела.