アプリケーションのキーダウンイベントハンドラーとキーアップイベントハンドラーの間でテストを実行する可能性はありますか?私は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);
}
しかし、それも失敗します。