1

アプリケーションのキーダウンイベントハンドラーとキーアップイベントハンドラーの間でテストを実行する可能性はありますか?私は2Dアーケードゲームを開発しています。gameView内のgameThreadはキーの押下を処理します。JUnit AndroidTestingProjectを作成しました。this.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));

}`

それは失敗します、私はそれが2つの理由のうちの1つのために起こると思います:

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);
}

しかし、それも失敗します。

4

2 に答える 2

1

送信されるイベントを完全に制御するには、Instrumentation#sendKeySyncが必要です。

于 2011-08-08T17:02:38.480 に答える
0

タッチベースのインタラクションを使用している場合は、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;
    }

}

シャッシュ

于 2011-08-08T14:07:59.800 に答える