android - 在按下和按下事件之间进行测试

标签 android junit key-events

是否有可能在应用程序的按键事件处理程序和按键事件处理程序之间运行测试?我开发了 2D 街机游戏,gameView 中的 gameThread 处理按键。我编写了 JUnit Android 测试项目。 我已经阅读了有关 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));

}`

它失败了,我认为它的发生是由于以下两个原因之一:

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

但它也失败了。

最佳答案

你需要Instrumentation#sendKeySync可以完全控制发送的事件。

关于android - 在按下和按下事件之间进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6983314/

相关文章:

java - 如何在android中为固定的IMEI生成固定的字节数组

android - 如何使用 lintOptions 在 gradle 上禁用 'contentDescription' 警告?

Android - 启动多个 Activity

java - DBUnit 在删除数据集时抛出 NoSuchColumnException

java - Junit 测试不恢复数据

javascript - 如何将移动的 div 限制在外部 div 中?

android - 当用户关闭应用程序时删除值

java - JUnit for Spring mvc 服务方法 void 返回类型

java - Java中判断何时没有按键

java - 使用 ActionBinding 按下组合键