使用Jukito进行测试时,GWT计时器UnsatisfiedLinkError

时间:2019-03-07 10:34:03

标签: java gwt junit gwtp jukito

我正在使用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仿真中),但这不能让我正确地测试计划计时器之后发生的情况。任何人都可以复制它或有任何解决办法的想法吗?

1 个答案:

答案 0 :(得分:5)

避免使用Timer,而改用com.google.gwt.core.client.Scheduler。然后,您可以在产品代码中绑定实际的调度程序,并在测试中绑定StubScheduler

您可以使用gwtmockito使Timer正常工作,但是由于您已经在使用注入,您确实应该在抽象后隐藏任何本机或GWT.create调用,并使用替代实现进行测试