2

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

但是,只有在经过测试时,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的错误报告。

4

0 回答 0