How to capture all mockito spied class method invocations without counting inner delegations
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
add a comment |
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
add a comment |
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
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
java mockito spy method-invocation
asked Oct 31 '18 at 9:06
user2207495user2207495
9018
9018
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
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.
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
add a comment |
Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
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
add a comment |
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.
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
add a comment |
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.
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.
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
add a comment |
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
add a comment |
Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.
add a comment |
Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.
add a comment |
Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.
Ok problem solved. Wrapped in java.lang.reflect.Proxy with custom invocation handler.
answered Nov 14 '18 at 15:45
user2207495user2207495
9018
9018
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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