LINUX.ORG.RU

[Android][Activity test]sendKey в UI-thread

 


0

1

Был у меня тест, который делал несколько performClick. Естественно, нужно было дождаться, когда оно там в UI-thread отработает - наворотил на wait-notify приблуду и пользовался, пока не узнал про @UiThreadTest. Радостно заюзал, но через 10 минут мне понадобилось добавить в тест sendKey, что в UI-thread работать не будет. Пытаться запустить это дело в другом треде и дождаться завершения, я так понял, не получится, т.к. sendKey сам ждет главный тред.

Вопрос: какие-нибудь еще варианты есть, кроме как убрать @UiThreadTest и дожидаться результатов performClick через wait-notify?

★★
Ответ на: комментарий от Boy_from_Jungle

Так я умею. И для этого есть @UiThreadTest. А если нужно сам тест не в ui-потоке делать(например, из-за sendKeys), то я через wait-notify дожидался, пока листнер клика по кнопке отработает. Вопрос в том, можно ли как-нить покрасивше сделать...

А вообще, у меня сейчас еще одна проблема образовалась: 1. Клик по кнопке, появляется AlertDialog c TextInput. 2. Через sendKeys вводим нужное значение. 3. Давим positiveButton, НО performClick завершается сразу, без вызова листнера (он вызовется уже потом, как будто там какой-то post-event случается).

В общем, пока что тестирование UI для меня - это ад... Такие дела.

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Вопрос в том, можно ли как-нить покрасивше сделать...

не-а.[маразм][гуглодевелоперы][наркомания] Элементы UI доступны только непосредственно из UI-треда.

arkhnchul ★★★
()
16 мая 2012 г.

Радостно заюзал, но через 10 минут мне понадобилось добавить в тест sendKey, что в UI-thread работать не будет

ActivityInstrumentationTestCase2 работает в том же потоке, что и сама Activity в книге по тестированию на андроиде, был пример для теста фильта в поле ввода

	public void testInputFilter() throws Throwable {
		runTestOnUiThread(new Runnable() {
			@Override
			public void run() {
				mCelsius.requestFocus();
			}
		});
		
		final Double n = -1.234d;
		sendKeys("MINUS 1 PERIOD 2 PERIOD 3 PERIOD 4");
		Object nr = null;
		try {
			nr = mCelsius.getNumber();
		}
		catch (NumberFormatException e) {
			nr = mCelsius.getText();
		}
		final String msg = "-1.2.3.4 should be filtered to " + n +
			" but is " + nr;
		assertEquals(msg, n, nr);
	}

может пригодится

F457 ★★★★
()
Ответ на: комментарий от F457

Может быть, скоро как раз планировал вернуться к андроиду. В другом треде видел упоминание «Android Application Testing Guide». Я так понял - дельная книга?

kulti ★★
() автор топика
Ответ на: комментарий от kulti

Эм... она единственная, мне известная, по теме тестирования на андроиде. Других я не встречал вообще. Разве что главу где-нить посветят тестам. Посему она вне конкуренции))

Написана вот этим человечком http://dtmilano.blogspot.com/ и в целом довольно годная.

F457 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.