栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Mockito验证特定的lambda已作为模拟方法中的参数传递

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mockito验证特定的lambda已作为模拟方法中的参数传递

是的你可以。这里的窍门是,您必须到达传递给的lambda实例,

registerMessage
然后执行该表达式,然后才能验证结果。

为了一个有意义的示例,我创建了一个

Handler
包含
dispatchMessage
要测试的类的类:

public class Handler {    private Dispatcher dispatcher = new Dispatcher();    public void dispatchMessage(MessageHandler handler, String argument1, String argument2, Long argument3) {        handler.registerMessage(() -> { dispatcher.dispatch(argument1,         argument2,         argument3);        });    }    interface MessageHandler {        void registerMessage(Runnable run);    }    static class Dispatcher {        void dispatch(String a, String b, long c){ // Do dispatch        }    }}

您要记住的是,lambda表达式只是将函数传递给方法的简写形式。在此示例中,函数是的

run
方法
Runnable
。因此,用于
registerMessage
的接口方法
MessageHandler
将a
Runnable
作为参数。我还包括的实现
Dispatcher
,它是从内部调用的
registerMessage
。测试如下所示:

@RunWith(MockitoJUnitRunner.class)public class HandlerTest {    @Mock    private Dispatcher dispatcher;    @InjectMocks    private Handler classUnderTest;    @Captor    private ArgumentCaptor<Runnable> registerMessageLambdaCaptor;    @Test    public void shouldCallDispatchMethod() {        final String a = "foo";        final String b = "bar";        final long c = 42L;        MessageHandler handler = mock(MessageHandler.class);        classUnderTest.dispatchMessage(handler, a, b, c);        verify(handler).registerMessage(registerMessageLambdaCaptor.capture());        Runnable lambda = registerMessageLambdaCaptor.getValue();        lambda.run();        verify(dispatcher).dispatch(a, b, c);    }}

有一个

ArgumentCaptor
lambda表达式供我们在的第一次验证中使用
registerMessage
。验证之后,我们可以从捕获程序中检索l​​ambda表达式。lambda表达式的类型为
Runnable
,如
MessageHandler
接口中所定义。因此,我们可以
run
在其上调用该方法,然后验证是否已使用所有适当的参数调用
dispatch
上的方法
Dispatcher



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号