运行gwt-test-utils单元测试时,GWT Timer会立即触发

时间:2012-08-17 20:46:40

标签: unit-testing gwt junit timer

我使用gwt-test-utils框架编写了一个单元测试,如here所述。 测试类内部使用com.google.gwt.user.client.Timer(不是Java默认计时器)。

但是,仅在测试时,Timer实例的行为不正确,因为它会在计划后立即触发。

当我运行此测试时

public class TimerTest extends GwtTest {
  @Override
  public String getModuleName() {
    return "com.whatevs";
  }

  @Test
  public void testTimer() {
    final int[] counter = { 0 };

    com.google.gwt.user.client.Timer t = new Timer() {
      @Override
      public void run() {
        Log.info("firing timer");
        counter[0]++; // just increase the counter
      }
    };

    Log.info("scheduling timer");
    t.schedule(1000000); // this should return immediately
    Log.info("scheduling returns");
    assertEquals(0, counter[0]); // the counter shouldn't yet be incremented
  }
}

我失败了

testTimer(com.whatevs.TimerTest): expected:<0> but was:<1>

调试输出

22:37:44,075  INFO gwt-log:81 - scheduling timer
22:37:44,075  INFO gwt-log:81 - firing timer
22:37:44,075  INFO gwt-log:81 - scheduling returns

请注意,测试是作为JUnit测试运行的,而不是先编译为JavaScript。

我做错了什么,还是我碰到了一个错误? 有没有其他方法来测试这样的类?

更新

我刚刚发现如果在上面的例子中我调用了scheduleRepeating,或者我在run方法中使用schedule重新安排了计时器,那么在将控制权返回给调用者之前,计时器会正好触发5次。

奇怪的是,我刚刚在gwt-test-utils上打开了a bug report

0 个答案:

没有答案