具有返回void的可运行参数的模拟方法



这是方法的接口:

void startWatch(MethodToWatch methodName, UUID uniqueID, Runnable toRun);

这就是实现:

public void startWatch(MethodToWatch methodName, UUID uniqueID, Runnable toRun) {
        this.startWatch(methodName, uniqueID);
        start();
        toRun.run();
        stop();
    }

我想用这样的东西来模拟这种方法:

IPerformanceStopWatch mock = mock(IPerformanceStopWatch.class);
when(performanceStopWatchFactory.getStartWatch()).thenReturn(mock);
when(mock.startWatch(any(), any(), any())).thenAnswer(new Answer<void>() {
    @Override
    public void answer(InvocationOnMock invocation) throws Throwable {
        Object[] args = invocation.getArguments();
        Runnable torun = (Callable)args[2];
        torun.run();
        return;
    }
});

问题是when(…)无法获得返回值为void的方法。

我怎样才能在不使用间谍的情况下使用这种方法?

使用doAnswer():

// It is supposed here that Mockito.doAnswer is statically imported
doAnswer(...).when(mock).startWatch(etc);

你可以重复使用你的答案,这很好。

相关内容

  • 没有找到相关文章

最新更新