我使用 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的错误报告。