Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PR open] Add feature to verify static methods calls in order #2548

Closed
mirkoalicastro opened this issue Jan 24, 2022 · 4 comments · Fixed by #2549
Closed

[PR open] Add feature to verify static methods calls in order #2548

mirkoalicastro opened this issue Jan 24, 2022 · 4 comments · Fixed by #2549

Comments

@mirkoalicastro
Copy link
Contributor

mirkoalicastro commented Jan 24, 2022

TL;DR Mockito doesn't allow verifying static methods calls in order. I have implemented this feature here: #2549. If possible, I'd like to contribute; or discuss other ways to achieve the same.


Hey Mockito team.

This discussion relates to: https://groups.google.com/g/mockito/c/wjd9jIj_oBs. Since I'm not sure that the Google group is active, I'm posting it here for now.

This issue is about verifying static methods calls in order. I'm aware of the InOrder class, but we can't pass a MockedStatic instance. I had a closer look, and we can pass to it a Class instance. But the InOrder interface is not powerful enough to verify that a static method has been called:

public interface InOrder {
  <T> T verify(T mock);
  <T> T verify(T mock, VerificationMode mode);
  void verifyNoMoreInteractions();
}

To verify static calls, using method references and lambdas, we likely need two more methods in the InOrder interface, with signatures similar to MockedStatic#verify:

public interface MockedStatic<T> extends ScopedMock {
  void verify(Verification verification)
  void verify(Verification verification, VerificationMode mode);
  ...
}

What do you think of the InOrder interface exposing two methods to deal with the MockedStatic objects that accept both the MockedStatic and the Verification instances to use? Like the following:

void verify(MockedStatic<?> mockedStatic, MockedStatic.Verification verification);
void verify(MockedStatic<?> mockedStatic, MockedStatic.Verification verification, VerificationMode mode);

I made the above changes, and we can verify static methods, together with instance methods too. I have updated the tests as well in my PR.

Let me know if you are aware of other ways to achieve the same. If it is not doable, then please share your thoughts about the above, and if I can contribute in case.

mirkoalicastro added a commit to mirkoalicastro/mockito that referenced this issue Jan 24, 2022
@rob93c
Copy link

rob93c commented Feb 1, 2022

As a Mockito user I would love to have this new feature @mirkoalicastro

@mirkoalicastro mirkoalicastro changed the title Add feature to verify static methods calls in order [PR open] Add feature to verify static methods calls in order Feb 1, 2022
@mirkoalicastro
Copy link
Contributor Author

As a Mockito user I would love to have this new feature @mirkoalicastro

I made it more clear that there is already a possible implementation with the mentioned PR, which includes tests as well, of course. I hope someone will look into this.

@mirkoalicastro
Copy link
Contributor Author

@TimvdLippe Are you able to provide some feedback on this / to involve relevant people? Many thanks.

@TimvdLippe
Copy link
Contributor

Sorry I hadn't gotten to it. I responded to the PR, it's looking good! We mainly need to figure out how we are handling the Class that is matching the mockedStatic, but I think in that case we should be passing that into the inOrder() method call. Let's iterate on the PR and see where it goes!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants