Создайте и используйте gradle или системное свойство в тестах Android.

В настоящее время я запускаю набор тестов, используя

adb shell am instrument -w ${PKGNAME}.test/android.support.test.runner.AndroidJUnitRunner

из bash-скрипта. Кроме того, при отладке и написании этих тестов я также запускаю их из Android Studio, поэтому я теряю возможность строки cmd.

Что я хотел бы сделать, так это иметь системное свойство или переменную buildConfig, которую я могу установить только в своих тестах, в значение true и иметь возможность использовать ее в своем коде Android.

Кажется, я не могу найти задачу/конфигурацию gradle, которая установит это для этого типа теста. Единственное, что я нашел близко, это testOptions, но, похоже, это только для модульных тестов.


person Russ Wheeler    schedule 02.10.2017    source источник


Ответы (2)


Идеальным решением было бы выяснить, как избежать необходимости знать в коде, если вы в настоящее время вообще находитесь в тесте. Вы не объяснили, зачем вам эта информация, поэтому взгляните на Comtaler ответ на аналогичный вопрос. Это может быть как раз то, что вам нужно.

person neits    schedule 03.10.2017
comment
Итак, это потому, что я борюсь с режимом погружения. Я использую UiAutomator и UiDevice в своих тестах, но при использовании режима погружения UiDevice не может получить полный размер экрана. У меня есть кнопки, которые мне нужно нажать, которые находятся под меню навигации. Что я хочу сделать в тестах, так это отключить иммерсивный режим, чтобы мои тесты работали правильно. - person Russ Wheeler; 03.10.2017
comment
Кроме того, я не уверен, что это поможет, потому что, когда я запускаю Immersive-тесты, используются 2 apk. Мое оригинальное приложение, а также тестовый apk, который работает с ним. Поэтому приложение, устанавливающее иммерсивный режим, не будет иметь .test. в названии пакета - person Russ Wheeler; 03.10.2017
comment
Но на самом деле, теперь, когда я думаю об этом, я не уверен, что мое приложение вообще может знать, запускается ли оно с тестовым apk, так что, возможно, это все равно невозможно... - person Russ Wheeler; 03.10.2017
comment
Обязательно добавьте эту и любую другую информацию, которая может быть полезна для людей, желающих ответить на исходный вопрос. Что именно вы имеете в виду под тестовым apk, который работает против него? - person neits; 05.10.2017

Чтобы изменить некоторые настройки только для теста androidTest/instrumantation/espresso, я придумал следующее решение:

 //DbHelper
 public class DbHelper extends SQLiteOpenHelper {
     public static AtomicBoolean isTestMode = new AtomicBoolean(false);

     private static String getDBName() {
       if (isTestMode.get()){
        return null; // use in memory sqlite db
       } else {
        return DB_NAME;
       }
     }

// within my unit test
@Rule
public ActivityTestRule<MyActivity> mActivityRule = new ActivityTestRule<MyActivity>(
        MyActivity.class){

    @Override
    protected void beforeActivityLaunched() {
        super.beforeActivityLaunched();
        DbHelper.isTestMode.set(true);
    }

    @Override
    protected void afterActivityFinished() {
        super.afterActivityFinished();
        DbHelper.isTestMode.set(false);
    }
};
person slowjack2k    schedule 19.10.2017