【问题标题】:Avoid sleeping snail in swing unit tests避免在 Swing 单元测试中沉睡
【发布时间】:2014-03-06 09:39:06
【问题描述】:

我想在我的 Swing 单元测试中避免使用 sleeping snail,但我看不到用事件来做到这一点的方法。目前我有一些想法

WindowWithKeyListener window = new WindowWithKeyListener();
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_1);
assertTrue(window.key1pressed());

robot.keyPress(KeyEvent.VK_2);
robot.keyRelease(KeyEvent.VK_2);
assertTrue(window.key2pressed());

如果在断言之前没有Thread.sleep(),这将不起作用,因为事件会变慢。但是我怎么能在这里避免Thread.sleep()

摆动计时器不能按特定顺序执行。在这里进行测试的最佳方法是什么?

【问题讨论】:

  • 我们已经在使用 Jemmy,如果有好的解决方案,那将是一个加分项。
  • 为什么不注册一个执行断言的侦听器,或者使用未来并等待侦听器完成?
  • 不知道是不是我的理解有误,不过我当然不想简单的验证事件触发,key1pressed代表因为事件触发而执行的更复杂的逻辑。 .. 一个 executor 和 Futures 应该可以工作,对吧。对我来说看起来有点矫枉过正,有没有更简单的解决方案?但是你怎么知道断言 Future 可以启动呢?
  • 好吧,既然您总是需要等到事件完成,您就必须等待这种情况或以某种方式同步调用。
  • 引用的文章建议使用CountDownLatch 让不同的线程会合;您可能会从herehere 显示的示例中得到一些想法

标签: java swing unit-testing


【解决方案1】:

杰米似乎已经解决了这个问题

org.netbeans.jemmy.operators.ComponentOperator.typeKey(int)

似乎需要等待。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2020-02-14
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多