2011-08-08 66 views
1

是否有可能在應用程序的按鍵和按鍵事件處理程序之間運行測試?我開發2D街機遊戲,gameView裏面的gameThread處理按鍵。我編寫了JUnit Android測試項目。 我已閱讀關於this.sendKeys(),但看起來,這種方法發送鍵,然後向下信號。按鍵和按鍵事件處理之間的測試

詳情: 我將同時使用 - touch &非觸摸式互動。但現在我正在測試

非觸摸。所以我寫了:

`保護無效設置()拋出異常{

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

}` 

它的工作好,但我寫了另外一個測試:

'公共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); 
} 

,但它也將失敗。

回答

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

我有兩個項目:遊戲和GameTest,第二次測試第一。你的代碼是一種不能在測試端運行的方法。雖然,也許我不知道一些測試機制。如果是這樣,請告訴我。 – Deepscorn