是否有可能在应用程序的key down和key up事件处理程序之间运行测试?我开发了2D街机游戏,gameThread里面的gameView处理按键。我写过JUnit Android测试项目。 我已经阅读过关于this.sendKeys(),但似乎这个方法发送了密钥,然后是信号。
详情: 我将同时使用 - touch&非接触式互动。但现在我正在测试
非触摸。所以我写道:
`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));
}`
它失败了,我认为这是因为以下两个原因之一:
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 :(得分:1)
您需要Instrumentation#sendKeySync才能完全控制所发送的事件。
答案 1 :(得分: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