我正在使用Jukito测试GWTP Presenter,在其中一个具有计时器作为重复任务字段的应用程序中,我抛出了此异常。
我正在运行GWT 2.8.2,GWTP 1.6,JUnit 4和Jukito 1.5
测试如下:
networkparameters
即使如下所示的基本测试也失败了:
@RunWith(JukitoRunner.class)
public class MyPresenterTest {
@Inject
MyPresenter presenter;
@Test
public void prepareFromRequestTest(EventBus eventBus,
MyServiceAsync MyService) {
PlaceRequest placeRequest = new PlaceRequest.Builder()
.nameToken(NameTokens.getMyPlace())
.with("aParam", "0110")
.build();
Data data = DataTestFactory.createData();
AsyncStubber.callSuccessWith(data)
.when(myService)
.requestDataToServer(eq("0110"), any());
// the timer scheduleRepeating is called in here:
presenter.prepareFromRequest(placeRequest);
}
}
这是一个完整的例外:
@RunWith(JukitoRunner.class)
public class GwtTimerTest {
@Test
public void testTimer() {
Timer timer = new Timer() {
@Override
public void run() {
System.out.println("timer");
}
};
timer.schedule(1000);
}
}
我想我可以捕获到一个错误(UnsatisfiedLinkError不在GWT的JRE仿真中),但这不能让我正确地测试计划计时器之后发生的情况。任何人都可以复制它或有任何解决办法的想法吗?
答案 0 :(得分:5)
避免使用Timer
,而改用com.google.gwt.core.client.Scheduler
。然后,您可以在产品代码中绑定实际的调度程序,并在测试中绑定StubScheduler
。
您可以使用gwtmockito使Timer
正常工作,但是由于您已经在使用注入,您确实应该在抽象后隐藏任何本机或GWT.create
调用,并使用替代实现进行测试