Тест между нажатием клавиши и событиями вверх - PullRequest
1 голос
/ 08 августа 2011

Есть ли возможность запустить тест между обработчиками события нажатия клавиши key и key up? Я разрабатываю 2D аркадную игру, gameThread внутри gameView обрабатывает нажатие клавиш. Я написал проект тестирования Android JUnit. Я читал об этом .sendKeys (), но похоже, что этот метод посылает сигналы вверх, затем вниз.

ДЕТАЛИ: Я буду использовать оба - сенсорное и бесконтактное взаимодействие. Но сейчас я тестирую

без сенсорного. Итак, я написал:

`protected void setUp () генерирует исключение {

    super.setUp();
    setActivityInitialTouchMode(false);
    _activity = (GameTemplate) getActivity();
    <...>

} `

как инициализация теста.

Я написал тест, чтобы убедиться, что событие keyUp обработано хорошо:

`public void testReturnState () {

    this.sendKeys(KeyEvent.KEYCODE_DPAD_LEFT);
    _instrumentation.waitForIdleSync();
assertTrue(_logic.getSerp().state().equals(SerpentState.SERP_MOVES_FORWARD));

}`

Работает нормально, но я написал еще один тест:

`public void testKeysSimple () {

    this.sendKeys(KeyEvent.KEYCODE_DPAD_LEFT);
    assertTrue(_logic.getSerp().state().equals(SerpentState.SERP_MOVES_LEFT));

}`

Сбой, я думаю, что это происходит по одной из двух причин:

1) программа еще не обработала событие keyDown;

2) программа обработала события как keyDown, так и keyUp

Я новичок в тестировании, возможно, все можно было бы сделать намного проще другим способом. Пожалуйста, помогите мне.

Я пытался добавить повторения в тесте:

public void testKeysUpDown() {  
    int t = TSet.skips;
    this.sendRepeatedKeys(TSet.keyRepeats,KeyEvent.KEYCODE_DPAD_LEFT);
    while(t>0 && !_logic.getSerp().state().equals(SerpentState.SERP_MOVES_LEFT)) t--;
    assertTrue(t>0);
}

но тоже не получается.

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Вам необходимо Instrumentation # sendKeySync , чтобы иметь полный контроль над отправленным событием.

0 голосов
/ 08 августа 2011

Если вы используете сенсорное взаимодействие, вы можете использовать MotionEvent.ACTION_MOVE. Это когда пользователь касается экрана и перетаскивает его, не поднимая палец вверх.

Фрагмент кода

public boolean onTouch(View v, MotionEvent rawEvent) {

    switch (rawEvent.getAction() & MotionEvent.ACTION_MASK)
    {
        case MotionEvent.ACTION_DOWN:
        // First touch on the screen
        break;

        case MotionEvent.ACTION_POINTER_DOWN:
        // Multi-touch on the screen
        break;

        case MotionEvent.ACTION_UP:
        // Lift from the screen
        break;

        case MotionEvent.ACTION_POINTER_UP:
        // Multi-Lift from the screen
        break;

        case MotionEvent.ACTION_MOVE:
        // Drag on the screen
        break;
    }

}

Шаша

...