В настоящее время я немного борюсь со структурой модульного тестирования ...
что я пытаюсь сделать
- Мне нужно смоделировать 2 щелчка по экрану (100 100) и (400 400) с небольшой разницей в продолжительности.
- Мне нужно смоделировать длинное нажатиеНажмите на экран Допустим, (200, 200)
- При щелчке пользователя запускается собственный код и выполняется обработка пикселей на растровом изображении.
- Этот тест будет выполняться для нескольких парных наборов точек для анализа производительности системы во время выполнения
Вот где я застрял
- Я использую ActivityInstrumentationTestCase2 и touchUtils для событий щелчка пользователя.
- TouchUtils.longClickView (тест InstrumentationTestCase, View v) работает нормально; Я могу быстро обнаружить событие длительного нажатия, но тестовый пример завершается еще до завершения вычислений / рендеринга в моем потоке пользовательского интерфейса; как мне остановить выход теста в этом случае?
- Как мне смоделировать 2/3 пользовательских кликов @ в определенном месте на экране? причина TouchUtils.clickView (тест InstrumentationTestCase, View v) будет только симулировать щелчок пользователя в центре экрана ... Как это сделать правильно?
Это то, что я пробовал, и, кажется, я что-то упускаю:
- TouchUtils.longClickView (тест InstrumentationTestCase, View v) отлично работает ... для создания longClickView .. Даже я смог создать longClickView () в определенном месте экрана, введя временную задержку между ACTION_DOWN и событием ACTION_UP .. пожалуйста, обратитесь к код прикреплен
- Мне удалось добиться события щелчка пользователя в определенном месте на экране, но я столкнулся со странной проблемой .. Когда я отправляю MotionEvent (100,100) из тестового примера. Каркас всегда добавляет «-76» в событии Y .. не уверен, почему произошло это отклонение ... я обошел проблему, добавив 76 к своим входным данным (100,176) на некоторое время .. кто-нибудь сталкивался с подобной проблемой?
- Даже при таком подходе время кажется очень важным ... как будто я помещаю большую задержку между ACTION_DOWN и ACTION_UP, событие определяется как longClickPress ... и если я помещаю немного меньше ... "второй" одиночный щелчок события (ACTION_DOWN + ACTION_UP) обнаруживаются как DoubleTapEvent ..
Какая должна быть правильная временная комбинация для ACTION_UP и ACTION_DOWN .. для имитации события клика одного пользователя .. ????????
@Test
public void testClick(){
List<Points> pointSequence = new ArrayList<Points>();
Log.d(TAG, "FirClick Start Timing : " + SystemClock.uptimeMillis());
pointSequence.add(new Points(100f,176f));
pointSequence.add(new Points(100f,176f));
singleClickSimulation(pointSequence,false);
}
private void singleClickSimulation(List<Points> pointSequence, Boolean addDelay) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
// NOTE : If I do not place this then the event is detected as doubleTap.
eventTime += 100;
Instrumentation inst = getInstrumentation();
MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, pointSequence.get(0).getX(), pointSequence.get(0).getY(), 0);
inst.sendPointerSync(event);
//eventTime = SystemClock.uptimeMillis();
pointSequence.remove(0);
//This delay I have added just to test; whether there is enough time for pixel manipulation or not, actually it would be used only at the end of the run of all the test cases for single user click
if(addDelay){
eventTime = SystemClock.uptimeMillis() + 3000;
}
eventTime += 25;
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, pointSequence.get(0).getX(), pointSequence.get(0).getY(), 0);
inst.sendPointerSync(event);
pointSequence.remove(0);
}