Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
MonStar
22 / 22 / 4
Регистрация: 10.04.2011
Сообщений: 241
1

Как вернуться в activity в тестах

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

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

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

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в...

Как добавить cardview в activity с другой activity?
У меня есть активность(1), куда нужно добавить cardview. в этой же активности...

Как в Navigation Drawer Activity засунуть Activity?
Здравствуйте! у меня такая проблема navigation drawer activity работает только...

Как вызвать Activity не из Activity?
Приложение перехватываем входящие СМС. Есть класс унаследованный от...

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

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

Java
1
finish();
junit tests. Это понятно, что finish(), а как мне получить объект этой активити, что бы его вызвать
0
Wenceslaus
Android Developer
130 / 130 / 6
Регистрация: 05.07.2013
Сообщений: 205
13.08.2013, 14:46 6
MonStar, так и получить:
Java
1
Activity mActivity = getActivity();
0
MonStar
22 / 22 / 4
Регистрация: 10.04.2011
Сообщений: 241
13.08.2013, 15:20  [ТС] 7
ActivityInstrumentationTestCase2<LaunchActivity> к примеру тут getActivity() должен вернуть мне LaunchActivity, или ту в которой я в данный момент? мне кажется первое
0
Wenceslaus
Android Developer
130 / 130 / 6
Регистрация: 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 - задержка в мс
1
MonStar
22 / 22 / 4
Регистрация: 10.04.2011
Сообщений: 241
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(). Можно ли перезапустить текущую для дальнейшего теста?
0
Wenceslaus
Android Developer
130 / 130 / 6
Регистрация: 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.
0
MonStar
22 / 22 / 4
Регистрация: 10.04.2011
Сообщений: 241
14.08.2013, 12:31  [ТС] 11
Под новым тестом вы понимаете отдельный тестовый класс или новый метод для тестирования?

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

Я не очень знаком с тонкостями тестирования, при выполнении нового метода запускается ли активити заново?
0
Wenceslaus
Android Developer
130 / 130 / 6
Регистрация: 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, это выглядит как её новый запуск, посему, если есть какие-либо настройки, то их необходимо будет провести заново.
1
14.08.2013, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 13:28

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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