65 lines
2.0 KiB
Plaintext
65 lines
2.0 KiB
Plaintext
Mockito provides _argument matchers_ and _argument captors_ for flexibly stubbing or verifying method calls.
|
|
|
|
|
|
``++Mockito.verify()++``, ``++Mockito.when()++``, ``++Stubber.when()++`` and ``++BDDMockito.given()++`` each have overloads with and without argument matchers.
|
|
|
|
|
|
However, if argument matchers or captors are used only on some of the parameters, all the parameters need to have matchers as well, otherwise an ``++InvalidUseOfMatchersException++`` will be thrown.
|
|
|
|
|
|
This rule consequently raises an issue every time matchers are not used on all the parameters of a stubbed/verified method.
|
|
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
@Test
|
|
public void myTest() {
|
|
given(foo.bar(anyInt(), i1, i2)).willReturn(null); // Noncompliant
|
|
when(foo.baz(eq(val1), val2)).thenReturn("hi"); // Noncompliant
|
|
doThrow(new RuntimeException()).when(foo).quux(intThat(x -> x >= 42), -1); // Noncompliant
|
|
verify(foo).bar(i1, anyInt(), i2); // Noncompliant
|
|
ArgumentCaptor<Integer> captor = ArgumentCaptor.forClass(Integer.class);
|
|
verify(foo).bar(captor.capture(), i1, any()); // Noncompliant
|
|
}
|
|
----
|
|
|
|
|
|
== Compliant Solution
|
|
|
|
----
|
|
@Test
|
|
public void myTest() {
|
|
given(foo.bar(anyInt(), eq(i1), eq(i2))).willReturn(null);
|
|
when(foo.baz(val1, val2)).thenReturn("hi");
|
|
doThrow(new RuntimeException()).when(foo).quux(intThat(x -> x >= 42), eq(-1));
|
|
verify(foo).bar(eq(i1), anyInt(), eq(i2));
|
|
ArgumentCaptor<Integer> captor = ArgumentCaptor.forClass(Integer.class);
|
|
verify(foo).bar(captor.capture(), any(), any());
|
|
}
|
|
----
|
|
|
|
|
|
== See
|
|
|
|
* https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#argument_matchers[Mockito documentation] - argument matchers
|
|
* S6068 - Call to Mockito method "verify", "when" or "given" should be simplified
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
include::highlighting.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|