如何使用easyMock在以下代码中模拟start()函数?
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);
有人可以建议我如何解决它吗?
答案 0 :(得分:0)
我在这里看到两个问题。首先,您没有将模拟的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);
这样做可以使一切顺利运行。