pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

  1. <tfoot id='rMVy4'></tfoot>

      <i id='rMVy4'><tr id='rMVy4'><dt id='rMVy4'><q id='rMVy4'><span id='rMVy4'><b id='rMVy4'><form id='rMVy4'><ins id='rMVy4'></ins><ul id='rMVy4'></ul><sub id='rMVy4'></sub></form><legend id='rMVy4'></legend><bdo id='rMVy4'><pre id='rMVy4'><center id='rMVy4'></center></pre></bdo></b><th id='rMVy4'></th></span></q></dt></tr></i><div class="ntllnr1" id='rMVy4'><tfoot id='rMVy4'></tfoot><dl id='rMVy4'><fieldset id='rMVy4'></fieldset></dl></div>

      <small id='rMVy4'></small><noframes id='rMVy4'>

      • <bdo id='rMVy4'></bdo><ul id='rMVy4'></ul>

      <legend id='rMVy4'><style id='rMVy4'><dir id='rMVy4'><q id='rMVy4'></q></dir></style></legend>
    1. Mockito 驗證特定的 lambda 已作為參數傳遞給 mock 的

      Mockito verify that a specific lambda has been passed as an argument in mock#39;s method(Mockito 驗證特定的 lambda 已作為參數傳遞給 mock 的方法)

      • <tfoot id='zYbAo'></tfoot>

      • <i id='zYbAo'><tr id='zYbAo'><dt id='zYbAo'><q id='zYbAo'><span id='zYbAo'><b id='zYbAo'><form id='zYbAo'><ins id='zYbAo'></ins><ul id='zYbAo'></ul><sub id='zYbAo'></sub></form><legend id='zYbAo'></legend><bdo id='zYbAo'><pre id='zYbAo'><center id='zYbAo'></center></pre></bdo></b><th id='zYbAo'></th></span></q></dt></tr></i><div class="rvdjlh7" id='zYbAo'><tfoot id='zYbAo'></tfoot><dl id='zYbAo'><fieldset id='zYbAo'></fieldset></dl></div>

        <small id='zYbAo'></small><noframes id='zYbAo'>

              <tbody id='zYbAo'></tbody>
            • <bdo id='zYbAo'></bdo><ul id='zYbAo'></ul>
              <legend id='zYbAo'><style id='zYbAo'><dir id='zYbAo'><q id='zYbAo'></q></dir></style></legend>

                本文介紹了Mockito 驗證特定的 lambda 已作為參數傳遞給 mock 的方法的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                我想測試以下方法:

                    public void dispatchMessage(MessageHandler handler, String argument1, String argument2, Long argument3) {
                
                    handler.registerMessage(() -> {
                        dispatcher.dispatch(argument1,
                                argument2,
                                argument3);
                    });
                
                }
                

                MessageHandler 是一個輔助類,它將接受 lambda 形式的功能接口實現,并將其存儲起來以供以后執行.

                Where MessageHandler is a helper class which will accept a Functional Interface implementation in the form a lambda, and store it for later execution.

                有沒有辦法用 mockito 驗證被模擬的 MessageHandlerdispatchMessage 方法已被特定的 lambda 表達式調用:

                Is there a way to verify with mockito that the dispatchMessage method of the mocked MessageHandler has been called with the specific lambda expression:

                意思,我能不能寫這樣一個測試:

                Meaning, can I write such a test:

                        @Test
                public void testDispatchMessage_Success() throws Exception {
                
                    myMessageDispatcher.dispatchMessage(handler, "activityId", "ctxId", 1l, );
                
                    verify(handler, times(1)).dispatchMessage(() -> {
                        dispatcher
                            .dispatch("activityId", "ctxId", 1l,);
                    });
                
                }
                
                }
                

                此測試將導致斷言錯誤:論據不同!通緝:

                This test will result in assertion error: Argument(s) are different! Wanted:

                ......Tests$$Lambda$28/379645464@48f278eb
                

                實際調用有不同的參數:

                Actual invocation has different arguments:

                ..........Lambda$27/482052083@2f217633
                

                這是有道理的,因為 mockito 試圖比較函數接口的兩個不同實現,它們具有不同的哈希碼.

                which makes sense since mockito tries to compare two different implementations of the functional interface, which have a different hash code.

                那么還有其他方法可以驗證方法 dispatchMessage() 是否已使用返回 void 的 lambda 調用,并且該方法的主體方法為dispatcher.dispatch("activityId", "ctxId", 1l,); ?

                So is there some other way to verify that the method dispatchMessage() has been called with a lambda that returns void and has a body method of dispatcher.dispatch("activityId", "ctxId", 1l,); ?

                推薦答案

                是的,你可以.這里的訣竅是,您必須獲取傳遞給 registerMessage 的 lambda 實例,然后執行該表達式,然后您才能驗證結果.

                Yes, you can. The trick here is that you have to get to the instance of the lambda that is passed to the registerMessage and then execute that expression and then you can verify the result.

                為了一個有意義的示例,我創建了這個 Handler 類,其中包含您要測試的 dispatchMessage:

                For the purpose of a meaningful example I created this Handler class that contains the dispatchMessage that you want to test:

                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 表達式只是將函數傳遞給方法的簡寫形式.在這個例子中,函數是 Runnablerun 方法.因此,MessageHandler 接口的方法registerMessageRunnable 作為其參數.我還包含了 Dispatcher 的實現,它是從 registerMessage 中調用的.對此的測試如下所示:

                What you have to remember is that a lambda expression is just a short hand form to pass a function to a method. In this example the function is the run method of a Runnable. Therefore the method registerMessage of the interface for MessageHandler takes a Runnable as it's argument. I also included an implementation for the Dispatcher, which is called from within registerMessage. The test for this looks like this:

                @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);
                    }
                }
                

                我們在 registerMessage 的第一次驗證中使用的 lambda 表達式有一個 ArgumentCaptor.在驗證之后,我們可以從捕獲者那里檢索 lambda 表達式.lambda 表達式的類型是 Runnable,在 MessageHandler 接口中定義.因此,我們可以對其調用 run 方法,然后驗證 Dispatcher 上的 dispatch 方法是否已使用所有適當的參數調用.

                There is an ArgumentCaptor for the lambda expression which we use in the first verification of the registerMessage. After that verification we can retrieve the lambda expression from the captor. The type of the lambda expression is Runnable, as defined in the MessageHandler interface. Hence we can call the run method on it and then verify that the dispatch method on the Dispatcher was called with all the appropriate arguments.

                這篇關于Mockito 驗證特定的 lambda 已作為參數傳遞給 mock 的方法的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                相關文檔推薦

                How can I detect integer overflow on 32 bits int?(如何檢測 32 位 int 上的整數溢出?)
                Local variables before return statements, does it matter?(return 語句之前的局部變量,這有關系嗎?)
                How to convert Integer to int?(如何將整數轉換為整數?)
                How do I create an int array with randomly shuffled numbers in a given range(如何在給定范圍內創建一個隨機打亂數字的 int 數組)
                Inconsistent behavior on java#39;s ==(java的行為不一致==)
                Why is Java able to store 0xff000000 as an int?(為什么 Java 能夠將 0xff000000 存儲為 int?)

                <small id='hIBNn'></small><noframes id='hIBNn'>

                <legend id='hIBNn'><style id='hIBNn'><dir id='hIBNn'><q id='hIBNn'></q></dir></style></legend>
                  <tbody id='hIBNn'></tbody>

                1. <tfoot id='hIBNn'></tfoot>

                    <i id='hIBNn'><tr id='hIBNn'><dt id='hIBNn'><q id='hIBNn'><span id='hIBNn'><b id='hIBNn'><form id='hIBNn'><ins id='hIBNn'></ins><ul id='hIBNn'></ul><sub id='hIBNn'></sub></form><legend id='hIBNn'></legend><bdo id='hIBNn'><pre id='hIBNn'><center id='hIBNn'></center></pre></bdo></b><th id='hIBNn'></th></span></q></dt></tr></i><div class="zvnb7r7" id='hIBNn'><tfoot id='hIBNn'></tfoot><dl id='hIBNn'><fieldset id='hIBNn'></fieldset></dl></div>

                      <bdo id='hIBNn'></bdo><ul id='hIBNn'></ul>
                        1. 主站蜘蛛池模板: 广东青藤环境科技有限公司-水质检测 | 咖啡加盟,咖啡店加盟连锁品牌-卡小逗 | 海外仓系统|国际货代系统|退货换标系统|WMS仓储系统|海豚云 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 实验室pH计|电导率仪|溶解氧测定仪|离子浓度计|多参数水质分析仪|pH电极-上海般特仪器有限公司 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 重庆LED显示屏_显示屏安装公司_重庆LED显示屏批发-彩光科技公司 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | 工业风机_环保空调_冷风机_工厂车间厂房通风降温设备旺成服务平台 | 流量检测仪-气密性检测装置-密封性试验仪-东莞市奥图自动化科技有限公司 | 美名宝起名网-在线宝宝、公司、起名平台 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | 波纹补偿器_不锈钢波纹补偿器_巩义市润达管道设备制造有限公司 | 收录网| 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 船用锚链|专业锚链生产厂家|安徽亚太锚链制造有限公司 | 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 铜镍-康铜-锰铜-电阻合金-NC003 - 杭州兴宇合金有限公司 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 首页|专注深圳注册公司,代理记账报税,注册商标代理,工商变更,企业400电话等企业一站式服务-慧用心 | 防锈油-助焊剂-光学玻璃清洗剂-贝塔防锈油生产厂家 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 光栅尺厂家_数显表维修-苏州泽升精密机械 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 进口试验机价格-进口生物材料试验机-西安卡夫曼测控技术有限公司 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 |