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