2011-08-08 49 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