How to capture all mockito spied class method invocations without counting inner delegations










1















Assuming that with a class like:



public class A 
public void smth

public void smth2
smth();




We spy it with mockito and make a simple call :



A spiedA = spy(new A());
spiedA.smth2();


After that when we want to retrieve call count:



Mockito.mockingDetails(spiedA).getInvocations().size()


And it returns two calls as expected. But i want to only register outside calls without inner delegations. Is there possibility to achieve the result i demand? If only Mockito.Invocation could provide with call stack i would filter it out.










share|improve this question


























    1















    Assuming that with a class like:



    public class A 
    public void smth

    public void smth2
    smth();




    We spy it with mockito and make a simple call :



    A spiedA = spy(new A());
    spiedA.smth2();


    After that when we want to retrieve call count:



    Mockito.mockingDetails(spiedA).getInvocations().size()


    And it returns two calls as expected. But i want to only register outside calls without inner delegations. Is there possibility to achieve the result i demand? If only Mockito.Invocation could provide with call stack i would filter it out.










    share|improve this question
























      1












      1








      1








      Assuming that with a class like:



      public class A 
      public void smth

      public void smth2
      smth();




      We spy it with mockito and make a simple call :



      A spiedA = spy(new A());
      spiedA.smth2();


      After that when we want to retrieve call count:



      Mockito.mockingDetails(spiedA).getInvocations().size()


      And it returns two calls as expected. But i want to only register outside calls without inner delegations. Is there possibility to achieve the result i demand? If only Mockito.Invocation could provide with call stack i would filter it out.










      share|improve this question














      Assuming that with a class like:



      public class A 
      public void smth

      public void smth2
      smth();




      We spy it with mockito and make a simple call :



      A spiedA = spy(new A());
      spiedA.smth2();


      After that when we want to retrieve call count:



      Mockito.mockingDetails(spiedA).getInvocations().size()


      And it returns two calls as expected. But i want to only register outside calls without inner delegations. Is there possibility to achieve the result i demand? If only Mockito.Invocation could provide with call stack i would filter it out.







      java mockito spy method-invocation






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Oct 31 '18 at 9:06









      user2207495user2207495

      9018




      9018






















          2 Answers
          2






          active

          oldest

          votes


















          0














          There is Location location field in Invocation class. In has actually stack trace inside (which is actually private field, so you should make it available through reflection). And after that you can grab required information, something like that:



          ((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace


          But I would really not recommend to do that, because you would not want to maintain that test in the future.
          You can extract smth() into different class and spy on it if you really need.






          share|improve this answer























          • Yea i know about that trick but it's hacky/ugly and not good approach after all. Extraction is also not an option unfortunately.

            – user2207495
            Oct 31 '18 at 10:03



















          0














          Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.






          share|improve this answer






















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53079758%2fhow-to-capture-all-mockito-spied-class-method-invocations-without-counting-inner%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            There is Location location field in Invocation class. In has actually stack trace inside (which is actually private field, so you should make it available through reflection). And after that you can grab required information, something like that:



            ((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace


            But I would really not recommend to do that, because you would not want to maintain that test in the future.
            You can extract smth() into different class and spy on it if you really need.






            share|improve this answer























            • Yea i know about that trick but it's hacky/ugly and not good approach after all. Extraction is also not an option unfortunately.

              – user2207495
              Oct 31 '18 at 10:03
















            0














            There is Location location field in Invocation class. In has actually stack trace inside (which is actually private field, so you should make it available through reflection). And after that you can grab required information, something like that:



            ((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace


            But I would really not recommend to do that, because you would not want to maintain that test in the future.
            You can extract smth() into different class and spy on it if you really need.






            share|improve this answer























            • Yea i know about that trick but it's hacky/ugly and not good approach after all. Extraction is also not an option unfortunately.

              – user2207495
              Oct 31 '18 at 10:03














            0












            0








            0







            There is Location location field in Invocation class. In has actually stack trace inside (which is actually private field, so you should make it available through reflection). And after that you can grab required information, something like that:



            ((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace


            But I would really not recommend to do that, because you would not want to maintain that test in the future.
            You can extract smth() into different class and spy on it if you really need.






            share|improve this answer













            There is Location location field in Invocation class. In has actually stack trace inside (which is actually private field, so you should make it available through reflection). And after that you can grab required information, something like that:



            ((LocationImpl)((LinkedList<Invocation>) invocations).get(1).getLocation()).stackTraceHolder.stackTrace


            But I would really not recommend to do that, because you would not want to maintain that test in the future.
            You can extract smth() into different class and spy on it if you really need.







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Oct 31 '18 at 9:33









            rxn1drxn1d

            865417




            865417












            • Yea i know about that trick but it's hacky/ugly and not good approach after all. Extraction is also not an option unfortunately.

              – user2207495
              Oct 31 '18 at 10:03


















            • Yea i know about that trick but it's hacky/ugly and not good approach after all. Extraction is also not an option unfortunately.

              – user2207495
              Oct 31 '18 at 10:03

















            Yea i know about that trick but it's hacky/ugly and not good approach after all. Extraction is also not an option unfortunately.

            – user2207495
            Oct 31 '18 at 10:03






            Yea i know about that trick but it's hacky/ugly and not good approach after all. Extraction is also not an option unfortunately.

            – user2207495
            Oct 31 '18 at 10:03














            0














            Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.






            share|improve this answer



























              0














              Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.






              share|improve this answer

























                0












                0








                0







                Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.






                share|improve this answer













                Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 14 '18 at 15:45









                user2207495user2207495

                9018




                9018



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53079758%2fhow-to-capture-all-mockito-spied-class-method-invocations-without-counting-inner%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Top Tejano songwriter Luis Silva dead of heart attack at 64

                    ReactJS Fetched API data displays live - need Data displayed static

                    政党