Bird
Raised Fist0
JUnittesting~20 mins

@Mock annotation in JUnit - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Mockito Mock Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Purpose of @Mock Annotation in JUnit Tests
What is the main purpose of using the @Mock annotation in JUnit testing with Mockito?
ATo create a fake object that simulates the behavior of a real dependency for isolated testing.
BTo automatically generate test data for parameterized tests.
CTo mark a test method that should be ignored during test execution.
DTo inject real implementations of dependencies into the test class.
Attempts:
2 left
💡 Hint
Think about how you isolate the class under test from its dependencies.
❓ Predict Output
intermediate
2:00remaining
Output of a Test Using @Mock Without Initialization
Consider this JUnit 5 test class using Mockito. What will happen when the test runs?
JUnit
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import static org.mockito.Mockito.*;

class ServiceTest {
    @Mock
    Repository repo;

    @Test
    void testService() {
        when(repo.getData()).thenReturn("mocked data");
        System.out.println(repo.getData());
    }
}
APrints 'mocked data' to the console.
BPrints 'null' to the console.
CThrows a NullPointerException at runtime.
DCompilation error due to missing import.
Attempts:
2 left
💡 Hint
Think about whether the @Mock annotation is activated automatically.
❓ assertion
advanced
1:30remaining
Correct Assertion to Verify Mock Interaction
Given a mock object mockList of type List, which assertion correctly verifies that the add("item") method was called exactly once?
Averify(mockList).add("item"); assertTrue(true);
Bverify(mockList, times(1)).add("item");
CassertEquals(1, mockList.add("item"));
DassertThat(mockList).contains("item");
Attempts:
2 left
💡 Hint
Mockito provides a special method to check how many times a method was called.
🔧 Debug
advanced
2:00remaining
Why Does This Mockito Test Fail?
This test fails with a NullPointerException. What is the most likely cause?
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import static org.mockito.Mockito.*;

class UserServiceTest {
    @Mock
    UserRepository userRepository;

    @Test
    void testGetUser() {
        when(userRepository.findUserById(1)).thenReturn(new User(1, "Alice"));
        UserService service = new UserService(userRepository);
        User user = service.getUser(1);
        assertEquals("Alice", user.getName());
    }
}
AMockito was not initialized, so userRepository is null causing NullPointerException.
BThe User class does not have a constructor with parameters.
CThe when() method is called after the service is created, causing timing issues.
DThe assertEquals method is used incorrectly with parameters reversed.
Attempts:
2 left
💡 Hint
Check if the mock object is properly created before use.
❓ framework
expert
2:30remaining
Best Way to Enable @Mock Annotation in JUnit 5 Tests
Which approach correctly enables the use of @Mock annotations in a JUnit 5 test class using Mockito?
AAdd <code>@MockBean</code> annotations instead of <code>@Mock</code>.
BCall <code>Mockito.mock()</code> manually for each mock field in every test method.
CUse <code>@RunWith(MockitoJUnitRunner.class)</code> on the test class.
DAnnotate the test class with <code>@ExtendWith(MockitoExtension.class)</code>.
Attempts:
2 left
💡 Hint
JUnit 5 uses extensions instead of runners.

Practice

(1/5)
1. What is the main purpose of the @Mock annotation in JUnit testing?
easy
A. To create fake objects that simulate real dependencies for testing
B. To run tests in parallel threads
C. To generate test reports automatically
D. To connect to a real database during tests

Solution

  1. Step 1: Understand the role of @Mock

    The @Mock annotation is used to create fake objects that imitate real dependencies in tests.
  2. Step 2: Identify the purpose in testing context

    This helps isolate the code being tested from external systems or complex objects.
  3. Final Answer:

    To create fake objects that simulate real dependencies for testing -> Option A
  4. Quick Check:

    @Mock creates fake objects [OK]
Hint: Mocks create fake objects to isolate tests [OK]
Common Mistakes:
  • Thinking @Mock runs tests in parallel
  • Confusing @Mock with test report generation
  • Assuming @Mock connects to real databases
2. Which of the following is the correct way to declare a mock object using @Mock in a JUnit 5 test class?
easy
A. @Mock private MyService service;
B. @Mock MyService service = new MyService();
C. @Mock public void service();
D. @Mock MyService service = null;

Solution

  1. Step 1: Check correct syntax for @Mock field declaration

    The mock object should be declared as a private field with the @Mock annotation and no initialization.
  2. Step 2: Identify the correct option

    @Mock private MyService service; correctly declares: @Mock private MyService service; without initializing it.
  3. Final Answer:

    @Mock private MyService service; -> Option A
  4. Quick Check:

    Declare mock as private field without initialization [OK]
Hint: Declare mocks as private fields without new keyword [OK]
Common Mistakes:
  • Initializing mock objects manually
  • Using @Mock on methods instead of fields
  • Declaring mocks as public or with invalid syntax
3. Given the following JUnit 5 test code snippet, what will be the output of service.getData() when called inside the test?
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

class MyServiceTest {
  @Mock
  MyService service;

  @Test
  void testGetData() {
    MockitoAnnotations.openMocks(this);
    when(service.getData()).thenReturn("mocked data");
    System.out.println(service.getData());
  }
}
medium
A. Original data from MyService
B. null
C. Throws NullPointerException
D. mocked data

Solution

  1. Step 1: Understand mock initialization

    The call to MockitoAnnotations.openMocks(this) initializes the @Mock annotated fields.
  2. Step 2: Analyze the stubbed method behavior

    The line when(service.getData()).thenReturn("mocked data") sets the mock to return "mocked data" when getData() is called.
  3. Final Answer:

    mocked data -> Option D
  4. Quick Check:

    Stubbed mock method returns set value [OK]
Hint: Initialize mocks and stub methods to control output [OK]
Common Mistakes:
  • Forgetting to initialize mocks before use
  • Expecting real method output instead of stubbed
  • Confusing null return with stubbed return
4. Identify the error in the following JUnit 5 test code using @Mock:
import org.junit.jupiter.api.Test;
import org.mockito.Mock;

class UserServiceTest {
  @Mock
  UserRepository repo;

  @Test
  void testFindUser() {
    when(repo.findUserById(1)).thenReturn(new User(1, "Alice"));
    UserService service = new UserService(repo);
    User user = service.findUser(1);
    assertEquals("Alice", user.getName());
  }
}
medium
A. The test method is missing the @Mock annotation
B. The when method is used incorrectly
C. Mocks are not initialized before use
D. UserService constructor cannot accept mocks

Solution

  1. Step 1: Check mock initialization

    The code declares @Mock UserRepository repo; but never initializes mocks with MockitoAnnotations.openMocks(this) or similar.
  2. Step 2: Understand consequence of missing initialization

    Without initialization, repo is null, so calling when(repo.findUserById(1)) causes a NullPointerException.
  3. Final Answer:

    Mocks are not initialized before use -> Option C
  4. Quick Check:

    Always initialize mocks before using them [OK]
Hint: Always initialize mocks before calling methods on them [OK]
Common Mistakes:
  • Forgetting MockitoAnnotations.openMocks(this)
  • Assuming @Mock auto-initializes mocks
  • Misusing when() without initialized mocks
5. You want to test a service method that depends on two different collaborators. You use @Mock to create fake objects for both. Which of the following is the best practice to ensure your mocks work correctly in the test?
hard
A. Declare mocks as local variables inside test methods
B. Initialize mocks with MockitoAnnotations.openMocks(this) in a setup method
C. Use real instances instead of mocks for better accuracy
D. Manually instantiate mocks with new keyword

Solution

  1. Step 1: Understand mock initialization best practice

    Mocks annotated with @Mock must be initialized before use, typically by calling MockitoAnnotations.openMocks(this) in a setup method.
  2. Step 2: Evaluate other options

    Manually creating mocks with new is incorrect; real instances break isolation; local variables lose scope and initialization benefits.
  3. Final Answer:

    Initialize mocks with MockitoAnnotations.openMocks(this) in a setup method -> Option B
  4. Quick Check:

    Initialize mocks in setup for reliable tests [OK]
Hint: Initialize all @Mock fields in setup method [OK]
Common Mistakes:
  • Creating mocks manually with new keyword
  • Using real objects instead of mocks
  • Declaring mocks inside test methods without initialization
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