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

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

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

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

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

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

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

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

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

Я не очень знаком с тонкостями тестирования, при выполнении нового метода запускается ли активити заново?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 13:28     Как вернуться в activity в тестах
Еще ссылки по теме:

Как наследовать класс activity Android
Как сделать такое activity? Android
Как обратиться к элементу Drawer Activity? Android
Android Как связать основную Activity со второй

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

Или воспользуйтесь поиском по форуму:
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
14.08.2013, 13:28     Как вернуться в activity в тестах #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, это выглядит как её новый запуск, посему, если есть какие-либо настройки, то их необходимо будет провести заново.
Yandex
Объявления
14.08.2013, 13:28     Как вернуться в activity в тестах
Ответ Создать тему
Опции темы

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