Intereting Posts
Как проверить таблицу Exist или нет в Suger ORM Android Ящик навигации и VideoView в Android Тест инструментальных средств Android не работает на Travis CI AVD, но работает на локальном эмуляторе AltBeacon's Android Beacon Library получает основные, второстепенные и UUID Как получить доступ к дочерним представлениям фрагмента внутри родительской активности фрагмента? Как узнать, сколько общих предпочтений в общих предпочтениях в android Google-play-services_lib.jar отсутствует после обновления до последней версии (3.1) Facebook 3.0 Вторая попытка входа в систему Android возвращает «Состояние сеанса закрыто» Переопределение Adapter.getView Создание элегантных кнопок Фоновый стиль не отображается на панели прогресса Android.view.InflateException при использовании selectableItemBackground Сохранение состояния объекта при нажатии пользователем кнопки «Назад» Обновление местоположения на основе состояния устройства Как программно изменить TextView на ImageView и обратно

Можно ли узнать, работает ли приложение Android как часть контрольно-измерительного теста

Есть ли проверка времени выполнения приложения, чтобы узнать, работает ли она как часть контрольно-измерительного теста?

Предыстория: наше приложение выполняет синхронизацию базы данных при запуске. Но это должно происходить только при регулярном запуске. Это особенно мешает тестированию приборов, проверяющим синхронизацию db. Не удивительно.

И со всеми другими тестами это просто отходы от циклов процессора.

Если вы используете ActivityUnitTestCase, вы можете установить собственный объект приложения с помощью setApplication и иметь флаг для включения или выключения синхронизации базы данных? Пример использования пользовательского объекта приложения в моем блоге:

http://www.paulbutcher.com/2011/03/mock-objects-on-android-with-borachio-part-3/

Начиная с уровня API 11, доступен метод ActivityManager.isRunningInTestHarness () . Это может сделать то, что вы хотите.

Более простым решением является проверка класса, который будет присутствовать только в тестовом пути, работает с JUnit 4 (в отличие от решения с использованием ActivityUnitTestCase) и не требует отправки пользовательских намерений в ваши действия / службы (которые могут даже не быть Возможно в некоторых случаях)

 private boolean isTesting() { try { Class.forName("com.company.SomeTestClass"); return true; } catch (ClassNotFoundException e) { return false; } } 

Вы можете передать намерение дополнительно к своей деятельности, указав, что оно находится под тестом.

1) В своем тесте пройдите «testMode» дополнительно к вашей деятельности:

 public void setUp() throws Exception { super.setUp(); Intent activityIntent = new Intent(); activityIntent.putExtra("testMode", true); setActivityIntent(activityIntent); } 

2) В вашей деятельности проверьте testMode:

 Bundle extras = getIntent().getExtras(); if (extras != null && extras.getBoolean("testMode")) { // disable your database sync } 

Эта работа для меня, потому что никакое реальное устройство не работает

 public static boolean isUnitTest() { return Build.BRAND.startsWith(Build.UNKNOWN) && Build.DEVICE.startsWith(Build.UNKNOWN) && Build.DEVICE.startsWith(Build.UNKNOWN) && Build.PRODUCT.startsWith(Build.UNKNOWN); }