This test class mocks UserService. The first test checks if createUser was called with any string. The second test checks if it was called with the exact string "Alice".
JUnit
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
class UserService {
void createUser(String name) {
// Imagine user creation logic here
}
}
public class UserServiceTest {
@Test
void testCreateUserCalledWithAnyName() {
UserService mockUserService = mock(UserService.class);
mockUserService.createUser("Bob");
// Verify method called with any String
verify(mockUserService).createUser(any(String.class));
}
@Test
void testCreateUserCalledWithExactName() {
UserService mockUserService = mock(UserService.class);
mockUserService.createUser("Alice");
// Verify method called with exact name "Alice"
verify(mockUserService).createUser(eq("Alice"));
}
}
OutputSuccess
Important Notes
Use any() when you don't care about the exact argument value.
Use eq() when you want to check for a specific value.
Mixing matchers and raw values in the same method call is not allowed; use matchers for all arguments.
Summary
Argument matchers help verify method calls flexibly.
any() matches any value of a type.
eq() matches an exact value.
Practice
(1/5)
1. What does the any() argument matcher do in JUnit Mockito tests?
easy
A. It matches any value of the specified type.
B. It matches only null values.
C. It matches only exact values.
D. It matches values that are greater than zero.
Solution
Step 1: Understand the purpose of any()
The any() matcher is used to accept any argument of a given type in method verification or stubbing.
Step 2: Compare with other matchers
Unlike eq(), which matches exact values, any() is flexible and matches all values of the specified type.
Final Answer:
It matches any value of the specified type. -> Option A
Quick Check:
any() = matches any value [OK]
Hint: Remember: any() accepts all values of a type [OK]
Common Mistakes:
Confusing any() with eq()
Thinking any() matches only null
Assuming any() matches only specific values
2. Which of the following is the correct syntax to verify a method call with an exact argument value using an argument matcher in Mockito?
easy
A. verify(mock).method(any(String.class));
B. verify(mock).method(any());
C. verify(mock).method(eq("test"));
D. verify(mock).method("test");
Solution
Step 1: Identify correct use of eq()
The eq() matcher is used to match an exact argument value in Mockito verification.
Step 2: Check syntax correctness
verify(mock).method(eq("test")); correctly uses eq("test") to verify the method was called with the exact string "test".
Final Answer:
verify(mock).method(eq("test")); -> Option C
Quick Check:
Exact value match = eq() [OK]
Hint: Use eq() to match exact argument values [OK]
Common Mistakes:
Using any() when exact match is needed
Omitting eq() for exact value
Using any() without specifying type
3. Consider the following code snippet:
when(service.process(any(String.class))).thenReturn("done");
String result = service.process("input");
What will be the value of result after execution?
medium
A. "input"
B. null
C. Throws an exception
D. "done"
Solution
Step 1: Analyze the stubbing with any()
The when clause uses any(String.class) to match any string argument and returns "done".
Step 2: Check the method call argument
The method is called with "input", which matches any(String.class), so the stub returns "done".
Hint: any() matches all inputs, so stub returns specified value [OK]
Common Mistakes:
Assuming method returns input argument
Thinking any() causes exception
Ignoring stubbing behavior
4. Identify the error in the following Mockito verification code:
verify(mock).update(eq("data"), any());
medium
A. eq() cannot be used with any().
B. Missing type parameter in any() matcher.
C. verify() should not be used with matchers.
D. No error; code is correct.
Solution
Step 1: Check usage of any()
The any() matcher requires a type parameter like any(String.class) to specify the argument type.
Step 2: Confirm correct matcher usage
Without the type, Mockito cannot determine the argument type, causing a compilation error.
Final Answer:
Missing type parameter in any() matcher. -> Option B
Quick Check:
any() needs type like any(String.class) [OK]
Hint: Always specify type in any() like any(String.class) [OK]
Common Mistakes:
Using any() without type parameter
Mixing eq() and any() incorrectly
Assuming verify() disallows matchers
5. You want to verify a method call that takes two arguments: a String and an Integer. The first argument must be exactly "test", and the second can be any Integer. Which Mockito verification is correct?
hard
A. verify(mock).method(eq("test"), any(Integer.class));
B. verify(mock).method(any(String.class), eq(1));
C. verify(mock).method(any(), any());
D. verify(mock).method(eq("test"), eq(1));
Solution
Step 1: Match exact first argument
The first argument must be exactly "test", so use eq("test").
Step 2: Match any Integer second argument
The second argument can be any Integer, so use any(Integer.class).
Step 3: Verify combined usage
verify(mock).method(eq("test"), any(Integer.class)); correctly combines eq() and any() for the two arguments.
Final Answer:
verify(mock).method(eq("test"), any(Integer.class)); -> Option A
Quick Check:
eq() + any(type) = exact + any argument [OK]
Hint: Use eq() for exact, any(type) for flexible args [OK]
Common Mistakes:
Swapping argument matchers incorrectly
Using any() without type
Using eq() for flexible arguments
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.