久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

  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="qwawimqqmiuu" 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="qwawimqqmiuu" 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="qwawimqqmiuu" id='hIBNn'><tfoot id='hIBNn'></tfoot><dl id='hIBNn'><fieldset id='hIBNn'></fieldset></dl></div>

                      <bdo id='hIBNn'></bdo><ul id='hIBNn'></ul>
                        1. 主站蜘蛛池模板: 中文字幕亚洲一区 | www.国产精 | 亚洲精品久久久久久久久久久久久 | 色视频网站在线观看 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 色中文在线 | 91超碰在线观看 | 蜜月va乱码一区二区三区 | 国产午夜精品久久久 | 视频一二三区 | 久久久久久国产 | 国产ts人妖系列高潮 | 色婷婷av一区二区三区软件 | 成人免费观看男女羞羞视频 | 欧美亚洲综合久久 | 久久大陆| 国产精品美女www爽爽爽 | 337p日韩| 国产乱码精品1区2区3区 | 国产中文区二幕区2012 | 国产亚洲精品91 | 91在线免费视频 | 91黄在线观看 | 日本久草视频 | 成人小视频在线观看 | 久久久久久一区 | 成人在线免费观看 | 91在线网| 久久99精品久久久久久国产越南 | 欧美日韩网站 | 户外露出一区二区三区 | 91精品国产91久久久久久密臀 | 日本精品久久久久久久 | 亚洲精品自在在线观看 | 久久久久久久久久久久91 | 特黄小视频| 在线成人一区 | 国产欧美视频一区 | 日韩国产精品一区二区三区 | 亚洲国产精品99久久久久久久久 | www.日韩高清|