1

是否有可能在应用程序的按键按下和按键按下事件处理程序之间运行测试?我开发2D街机游戏,gameView里面的gameThread处理按键。我写了 JUnit Android 测试项目。我已经阅读过this.sendKeys(),但似乎这个方法发送键向上,然后向下信号。

详细信息:我将同时使用 - 触摸和非触摸交互。但现在我正在测试

非触摸。所以我写道:

`protected void setUp() 抛出异常 {

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

}`

它工作正常,但我写了另一个测试:

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

但它也失败了。

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 回答