Java verify void method calls n times with Mockito

前端 未结 1 1568
别跟我提以往
别跟我提以往 2020-12-04 08:15

I\'m trying to verify that a (void) method is being called inside of a DAO - I\'m using a commit point that sends a list of results up to that point, resets the list and con

相关标签:
1条回答
  • 2020-12-04 08:37

    The necessary method is Mockito#verify:

    public static <T> T verify(T mock,
                               VerificationMode mode)
    

    mock is your mocked object and mode is the VerificationMode that describes how the mock should be verified. Possible modes are:

    verify(mock, times(5)).someMethod("was called five times");
    verify(mock, never()).someMethod("was never called");
    verify(mock, atLeastOnce()).someMethod("was called at least once");
    verify(mock, atLeast(2)).someMethod("was called at least twice");
    verify(mock, atMost(3)).someMethod("was called at most 3 times");
    verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
    verify(mock, only()).someMethod("no other method has been called on the mock");
    

    You'll need these static imports from the Mockito class in order to use the verify method and these verification modes:

    import static org.mockito.Mockito.atLeast;
    import static org.mockito.Mockito.atLeastOnce;
    import static org.mockito.Mockito.atMost;
    import static org.mockito.Mockito.never;
    import static org.mockito.Mockito.only;
    import static org.mockito.Mockito.times;
    import static org.mockito.Mockito.verify;
    

    So in your case the correct syntax will be:

    Mockito.verify(mock, times(4)).send()
    

    This verifies that the method send was called 4 times on the mocked object. It will fail if it was called less or more than 4 times.


    If you just want to check, if the method has been called once, then you don't need to pass a VerificationMode. A simple

    verify(mock).someMethod("was called once");
    

    would be enough. It internally uses verify(mock, times(1)).someMethod("was called once");.


    It is possible to have multiple verification calls on the same mock to achieve a "between" verification. Mockito doesn't support something like this verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");, but we can write

    verify(mock, atLeast(4)).someMethod("was called at least four times ...");
    verify(mock, atMost(6)).someMethod("... and not more than six times");
    

    instead, to get the same behaviour. The bounds are included, so the test case is green when the method was called 4, 5 or 6 times.

    0 讨论(0)
提交回复
热议问题