Есть ли проверка времени выполнения приложения, чтобы узнать, работает ли она как часть контрольно-измерительного теста?
Предыстория: наше приложение выполняет синхронизацию базы данных при запуске. Но это должно происходить только при регулярном запуске. Это особенно мешает тестированию приборов, проверяющим синхронизацию 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); }