Смоделируйте метод scheduleWithFixedDelay, используя EasyMock - PullRequest
0 голосов
/ 10 января 2019

Как можно смоделировать функцию start () в следующем коде с помощью easyMock?

class A {

    public runOnce(Integer a) {
       // do something
    }

    public void start() {
        executor.scheduleWithFixedDelay(() -> runOnce(12), 0, 1000, TimeUnit.MILLISECONDS);
    }
}

Я пробовал следующим образом, который не работает:

ScheduledExecutorService executorService = createMock(ScheduledExecutorService.class);
executorService.scheduleWithFixedDelay(anyObject(), eq(0), eq(1000), eq(TimeUnit.MILLISECONDS));
expectLastCall().andReturn(null);

A a = createMockBuilder(A.class).addMockedMethod(A.class.getDeclaredMethod("runOnce", Integer.class)).createMock();

a.runOnce(12);
expectLastCall();

replay(executorService);
a.start();
verify(executorService);

Может кто-нибудь подсказать, как это исправить?

1 Ответ

0 голосов
/ 11 января 2019

Я вижу две проблемы здесь. Во-первых, вы не добавляете поддельный executorService в ваш A экземпляр. Я предполагаю, что вы можете использовать конструктор для этого.

A a = createMockBuilder(A.class)
        .addMockedMethod(A.class.getDeclaredMethod("runOnce", Integer.class))
        .withConstructor(executorService)
        .createMock();

Тогда сопоставители должны принимать правильные типы в параметре. Так что здесь scheduleWithFixedDelay ожидает long. Так что ожидание должно быть

expect(executorService.scheduleWithFixedDelay(anyObject(), eq(0L), eq(1000L), eq(TimeUnit.MILLISECONDS)))
    .andReturn(null);

Благодаря этому все работает гладко.

...