Я работаю над автоматизированным набором тестов для нашего приложения для Android и сталкиваюсь с трудностями, ожидая, что действия будут полностью загружены. Я могу вызвать getActivity, но только потому, что он показывает активность, которую я надеюсь увидеть в своем тесте, не всегда означает, что компоненты активности готовы к использованию (полностью загружены). Просматривая API активности, ничего не получилось, и другие методы кажутся слишком инвазивными и испортили начальное состояние тестов. Кто-нибудь знает, есть ли способ спросить приложение или виртуальную машину, если текущая активность загружена?
Как узнать, когда закончена загрузка Android?
Ответ 1
Как я упоминал в комментарий, ваша иерархия просмотров должна работать после вашего вызова setContentView()
в начале onCreate()
. У меня никогда не было таких проблем с какой-либо деятельностью или тестовым классом.
Я не уверен, что это поможет в этом конкретном случае, но в общем случае вы можете определить, когда очередь событий UI пуста, вызывая getInstrumentation().waitForIdleSync()
. Это будет заблокировано, пока не будет обработано больше событий пользовательского интерфейса.
Ответ 2
Если вы создаете метод setUp()
, подобный этому в вашем тестовом примере, расширяющий ActivityInstrumentationTestCase2<MyActivity>
@Override
protected void setUp() throws Exception {
super.setUp();
final MyActivity activity = getActivity();
tv1 = (EditNumber)activity.findViewById(resId1);
tv2 = (EditNumber)activity.findViewById(resId2);
}
ваша деятельность будет полностью работоспособна и загружен макет, продемонстрированный в этом случае тем фактом, что вы можете получить доступ к представлениям и их содержимому
@SmallTest
public void testSimpleCreate() {
final MyActivity activity = getActivity();
assertNotNull(activity);
assertNotNull(tv1);
assertEquals("mystr1", tv1.getText().toString());
assertNotNull(tv1);
assertEquals("mystr2", tv2.getText().toString());
}
Ответ 3
Может быть более элегантный способ, но попытался ли вы установить логическое значение в конце вашего метода OnCreate()?