Bird
Raised Fist0
JUnittesting~10 mins

Argument matchers (any, eq) in JUnit - Test Execution Trace

Choose your learning style10 modes available
Test Overview

This test verifies that a method is called with specific argument values using eq() and any argument using any() matchers in JUnit with Mockito. It checks that the service method behaves correctly when called with expected parameters.

Test Code - JUnit with Mockito
JUnit
import static org.mockito.Mockito.*;
import static org.mockito.ArgumentMatchers.*;
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

interface UserRepository {
    String findRole(String userId, Boolean active);
}

class UserService {
    UserRepository repo;
    UserService(UserRepository repo) {
        this.repo = repo;
    }
    String getUserRole(String userId, boolean active) {
        return repo.findRole(userId, active);
    }
}

public class UserServiceTest {
    @Test
    void testGetUserRoleWithArgumentMatchers() {
        UserRepository mockRepo = Mockito.mock(UserRepository.class);
        when(mockRepo.findRole(eq("user123"), any(Boolean.class))).thenReturn("admin");

        UserService service = new UserService(mockRepo);
        String role = service.getUserRole("user123", true);

        assertEquals("admin", role);
        verify(mockRepo).findRole(eq("user123"), any(Boolean.class));
    }
}
Execution Trace - 8 Steps
StepActionSystem StateAssertionResult
1Test startsJUnit test runner initialized—PASS
2Mockito mock UserRepository createdMock object ready to intercept calls—PASS
3Stub findRole method with eq("user123") and any(Boolean.class) to return "admin"Mock configured to return 'admin' for matching arguments—PASS
4UserService instance created with mock repositoryService ready to call mocked method—PASS
5Call getUserRole("user123", true)Method calls mockRepo.findRole("user123", true)Check that findRole is called with eq("user123") and any(Boolean.class)PASS
6Assert returned role equals "admin"Role variable holds method return valueassertEquals("admin", role)PASS
7Verify mockRepo.findRole called with eq("user123") and any(Boolean.class)Mockito verifies method call argumentsverify(mockRepo).findRole(eq("user123"), any(Boolean.class))PASS
8Test ends successfullyAll assertions passed—PASS
Failure Scenario
Failing Condition: The findRole method is called with arguments that do not match eq("user123") or any(Boolean.class), or the stub is not set correctly.
Execution Trace Quiz - 3 Questions
Test your understanding
What does the matcher eq("user123") do in this test?
AAllows any string argument
BChecks that the argument is not null
CChecks that the argument exactly equals "user123"
DMatches any Boolean argument
Key Result
When using Mockito argument matchers like eq() and any(), always use matchers for all arguments in a method call to avoid errors and ensure precise verification.

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

  1. 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.
  2. Step 2: Compare with other matchers

    Unlike eq(), which matches exact values, any() is flexible and matches all values of the specified type.
  3. Final Answer:

    It matches any value of the specified type. -> Option A
  4. 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

  1. Step 1: Identify correct use of eq()

    The eq() matcher is used to match an exact argument value in Mockito verification.
  2. 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".
  3. Final Answer:

    verify(mock).method(eq("test")); -> Option C
  4. 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

  1. Step 1: Analyze the stubbing with any()

    The when clause uses any(String.class) to match any string argument and returns "done".
  2. Step 2: Check the method call argument

    The method is called with "input", which matches any(String.class), so the stub returns "done".
  3. Final Answer:

    "done" -> Option D
  4. Quick Check:

    any(String.class) matches "input" = returns "done" [OK]
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

  1. Step 1: Check usage of any()

    The any() matcher requires a type parameter like any(String.class) to specify the argument type.
  2. Step 2: Confirm correct matcher usage

    Without the type, Mockito cannot determine the argument type, causing a compilation error.
  3. Final Answer:

    Missing type parameter in any() matcher. -> Option B
  4. 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

  1. Step 1: Match exact first argument

    The first argument must be exactly "test", so use eq("test").
  2. Step 2: Match any Integer second argument

    The second argument can be any Integer, so use any(Integer.class).
  3. Step 3: Verify combined usage

    verify(mock).method(eq("test"), any(Integer.class)); correctly combines eq() and any() for the two arguments.
  4. Final Answer:

    verify(mock).method(eq("test"), any(Integer.class)); -> Option A
  5. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard