2011-08-08 5 views
1

アプリケーションのキーダウンイベントハンドラとキーアップイベントハンドラの間でテストを実行する可能性はありますか?私は2Dアーケードゲームを開発します。gameViewの中のgameThreadは、キープレスを処理します。私はJUnit Androidテストプロジェクトを書いています。 私はthis.sendKeys()について読んだことがありますが、このメソッドはキーを送信してからシグナルを送信するようです。キーダウンイベントとキーアップイベントのテスト

詳細: 私は両方のタッチを使用しています - &タッチ以外の対話。しかし、今私はテストしている

ノンタッチ。だから、私が書いた:

`保護ボイドセットアップが()試験イニシャライズとして例外{

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

}`

をスロー。

私は、keyUpイベントがうまく処理されていること、を確認するためにテストを書いた:

`公共ボイドtestReturnState(){

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

}` 

をそれは[OK]を動作しますが、私は別のテストを書いた:

`公衆空testKeysSimple(){

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

}` 

それが失敗し、私はそれが理由の一つで起こると思います2つの理由:

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

それも失敗します。

答えて

1

あなたは、送信されるイベントを完全に制御を持っているInstrumentation#sendKeySyncを必要としています。

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

} 

Shash

+0

私は今非タッチイベントのテストを書いています。私は私の質問に詳細を持ってきました。上記を参照してください、これは私の最初の質問ですので、ごめんなさい、何か間違っている場合。 – Deepscorn

+0

私は2つのプロジェクトを持っています:ゲームとGameTest、最初の2番目のテスト。あなたのコードは、テスト側で実行することはできませんメソッドです。しかし、おそらく私はいくつかのテストの仕組みを知らない。もしそうなら、教えてください。 – Deepscorn