Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
#1

Как вернуться в activity в тестах - Программирование Android

13.08.2013, 14:24. Просмотров 975. Ответов 11
Метки нет (Все метки)

В тестах приложения, когда проверяю нажатия на кнопки открывается другая активити. Как вернуться назад?

И ещё вопрос, если над методом в тестах не поставить аннотацию @UiThreadTest, то ресурсы не возвращают кнопки и так далее из R.id.button , а внутри метода с аннотацией нет возможности использовать TouchUtil к примеру и подобные тестовые фичи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2013, 14:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вернуться в activity в тестах (Программирование Android):

Как вызвать Activity не из Activity? - Программирование Android
Приложение перехватываем входящие СМС. Есть класс унаследованный от BroadcastReceiver, который обозначен в манифесте как приемник...

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity - Программирование Android
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было принято из-за скорости. Но...

Изменение layout-элементов одного activity из другого activity - Программирование Android
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном activity из второго activity, каким образом мне можно это...

Android - Передача данных с одного Activity на другое Activity - Программирование Android
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном Activity , а обработка и вывод...

Из одной Activity запустить функцию другой Activity - Программирование Android
например есть Activity2 которое я показываю в Dialog окошке, там у меня находятся Date and Time Picker ы (Дата - начало, Дата - окончание)...

Вызвать из одной activity функцию другой activity - Программирование Android
вызвать из одного activity функцию другой activity Подскажите, можно ли такое реализовать? Допустим у меня есть основная активити и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
13.08.2013, 14:29 #2
Цитата Сообщение от MonStar Посмотреть сообщение
В тестах приложения, когда проверяю нажатия на кнопки открывается другая активити. Как вернуться назад?
Кнопкой назад. Или "убить" текущую активити и предыдущая поднимется по стеку
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
13.08.2013, 14:30  [ТС] #3
Цитата Сообщение от Digetix Посмотреть сообщение
Кнопкой назад. Или "убить" текущую активити и предыдущая поднимется по стеку
кнопка назад переопределена и закрывает приложение, а как получить текущую активити в тестах, что бы убить?
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
13.08.2013, 14:39 #4
Цитата Сообщение от MonStar Посмотреть сообщение
а как получить текущую активити в тестах
Что за тесты?
Цитата Сообщение от MonStar Посмотреть сообщение
что бы убить?
Java
1
finish();
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
13.08.2013, 14:40  [ТС] #5
Цитата Сообщение от Digetix Посмотреть сообщение
Что за тесты?

Java
1
finish();
junit tests. Это понятно, что finish(), а как мне получить объект этой активити, что бы его вызвать
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
13.08.2013, 14:46 #6
MonStar, так и получить:
Java
1
Activity mActivity = getActivity();
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
13.08.2013, 15:20  [ТС] #7
ActivityInstrumentationTestCase2<LaunchActivity> к примеру тут getActivity() должен вернуть мне LaunchActivity, или ту в которой я в данный момент? мне кажется первое
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
13.08.2013, 15:33 #8
MonStar, да LaunchActivity. Не сразу вник в суть вопроса. Что бы получить активное используйте ActivityMonitor:
Java
1
2
ActivityMonitor activityMonitor = getInstrumentation().addMonitor(MyActivity.class.getName(), null, false);
MyActivity myActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 10000); // 10000 - задержка в мс
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
14.08.2013, 11:49  [ТС] #9
Цитата Сообщение от Wenceslaus Посмотреть сообщение
MonStar, да LaunchActivity. Не сразу вник в суть вопроса. Что бы получить активное используйте ActivityMonitor:
Java
1
2
ActivityMonitor activityMonitor = getInstrumentation().addMonitor(MyActivity.class.getName(), null, false);
MyActivity myActivity = getInstrumentation().waitForMonitorWithTimeout(activityMonitor, 10000); // 10000 - задержка в мс
спасибо, то что нужно

Добавлено через 20 часов 15 минут
Проблема немного расширилась. Дело в том, что по клику открывается новая активити, а для текущей вызывается finish(). Можно ли перезапустить текущую для дальнейшего теста?
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
14.08.2013, 12:24 #10
MonStar, если логика программы предполагает следующую навигацию:

[startApp] start ActivityA -> use ActivityA (start next) -> finish ActivityA; start ActivityB -> use ActivityB (back) -> finish ActivityB [finishApp]

то не к чему писать тесты для

[startApp] start ActivityA -> use ActivityA (start next) -> finish ActivityA; start ActivityB -> use ActivityB (back) -> finish ActivityB; start ActivityA -> use ActivityA

Если я не прав (или что-то не так понял) поправьте, но тесты направлены на тестирование логики работы приложения, а не создания новой (непредусмотренной возможностями) логики и её тестирования.
Если вы хотите протестировать работу кнопки (стартующей следующее Activity), а потом ещё что-либо в тестируемой Activity (а не только что запущенной) просто напишите новый тест, это будет намного лучше перезапуска уже закрытой Activity.
MonStar
19 / 19 / 3
Регистрация: 10.04.2011
Сообщений: 225
14.08.2013, 12:31  [ТС] #11
Под новым тестом вы понимаете отдельный тестовый класс или новый метод для тестирования?

У меня три различных test метода, каждый из которых кликает на три различные кнопки, которые в свою очередь открывают другую активити и закрывают текущую. Т.е. логика предполагает, что пользователь может нажать любую из них и нужно это проверить.

Я не очень знаком с тонкостями тестирования, при выполнении нового метода запускается ли активити заново?
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
14.08.2013, 13:28 #12
MonStar, теперь всё понятно, хоть я тоже не силён в тестировании, но:
Новый метод не перезапускает Activity, оно создаётся при старте теста.
В вашем случае, а именно до проверки работы очередной кнопы, вызывайте следующий код:
Java
1
2
3
//mActivity.finish(); // на случай, если Activity не останавливается программно
setActivity(null); // без этого не будет перезапуска
mActivity = this.getActivity();
для любознательных

Исходник метода getActivity()
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public T getActivity() {
    Activity a = super.getActivity();
    if (a == null) {
        // set initial touch mode
        getInstrumentation().setInTouchMode(mInitialTouchMode);
        final String targetPackage = 
            getInstrumentation().getTargetContext().getPackageName();
        // inject custom intent, if provided
        if (mActivityIntent == null) {
            a = launchActivity(targetPackage, mActivityClass, null);
        } else {
            a = launchActivityWithIntent(targetPackage, 
                                         mActivityClass, 
                                         mActivityIntent);
        }
        setActivity(a);
    }
    return (T) a;
}

фактически он пересоздаёт Activity, это выглядит как её новый запуск, посему, если есть какие-либо настройки, то их необходимо будет провести заново.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 13:28
Привет! Вот еще темы с ответами:

Из одного Activity получить значение другого Activity - Программирование Android
Запускаю активити: public class MainActivity extends Activity { ... ... Intent intent = new Intent(getBaseContext(),...

Создание Activity в другом Activity - Программирование Android
Нормально ли создавать экземпляр какого-либо Activity в текущем Activity? Дело в том, что код, нужный для работы с данными находится в...

Как удалить activity? - Программирование Android
мне нужно при запуске второго активити(т есть когда его видно) что бы первое уничтожалось но только не завершалась программа ...

Как сделать такое activity? - Программирование Android
Добрый день. Для начала по прошу держать свои камни при себе да бы они не попали в меня. Так как я начинающий в этом деле человек. Хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.08.2013, 13:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru