mockito 如何为void返回方法定义AnswersWithDelay

3okqufwl  于 2022-11-08  发布在  其他
关注(0)|答案(3)|浏览(139)

所以,我想在Mockito中模拟一个方法,它正在进行网络调用,并在返回之前等待它完成。我在这里找到了这个很好的答案:https://stackoverflow.com/a/50530261/4433222,建议使用AnswersWithDelay
问题是我很难为一个返回void的方法定义一个方法的行为。AnswersWithDelays构造函数需要一个Answer<Object>类型的参数,而我却找不到如何将其设置为void。有什么线索吗?

8cdiaqws

8cdiaqws1#

首先,AnswersWithDelay是Mockito的一个内部类,所以不应该直接使用它。该类的示例应该通过使用公共AdditionalAnswers类中的工厂方法来创建。
所以你只需要

doAnswer(AdditionalAnswers.answersWithDelay(delay, invocation -> null)).when(mockObject).doSomething();
ny6fqffe

ny6fqffe2#

基于this的回答,用草稿测试类。

@ExtendWith(SpringExtension.class)
public class MockDelayVoidTest {

    @MockBean
    private Object myMock;

    void test(){
        Mockito.doAnswer(AdditionalAnswers.answersWithDelay(1000, invocationOnMock -> {
            //here you can customize the behavior of your mock method
            return null;}))
                .when(myMock).toString();
    }
}
jhiyze9q

jhiyze9q3#

另一种方式可以是,

Mockito.doAnswer(invocation -> {
        TimeUnit.SECONDS.sleep(5);
        return null;
    }).when(mock).doSomething();

相关问题