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

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

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

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

Solutions Collecting From Web of "Можно ли узнать, работает ли приложение Android как часть контрольно-измерительного теста"

Если вы используете 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); }