Bird
Raised Fist0
Spring Bootframework~5 mins

@MockBean for mocking dependencies in Spring Boot - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the @MockBean annotation in Spring Boot tests?

@MockBean creates a mock of a Spring bean and adds it to the application context during tests. It replaces the real bean with a mock to isolate the unit under test.

Click to reveal answer
intermediate
How does @MockBean differ from using Mockito's @Mock annotation?

@MockBean integrates the mock into the Spring application context, replacing the real bean. @Mock only creates a mock object but does not replace any Spring beans.

Click to reveal answer
intermediate
Can @MockBean be used to mock multiple beans of the same type in a Spring Boot test?

Yes, you can use multiple @MockBean annotations to mock different beans, but if there are multiple beans of the same type, you may need to specify the bean name to avoid conflicts.

Click to reveal answer
beginner
Where should @MockBean be placed in a Spring Boot test class?

@MockBean is placed on fields inside the test class. Spring Boot will create and inject the mock bean into the application context before tests run.

Click to reveal answer
advanced
What happens if you use @MockBean on a bean that is not present in the application context?

Spring Boot will add the mock bean to the context even if the original bean does not exist. This can be useful to add mocks for optional dependencies.

Click to reveal answer
What does @MockBean do in a Spring Boot test?
AReplaces a Spring bean with a mock in the application context
BCreates a mock object but does not add it to the context
CRuns the real bean without mocking
DDeletes the bean from the application context
Where do you place the @MockBean annotation in your test code?
AOn the test class itself
BOn the main application class
COn fields inside the test class
DOn the method under test
Which of these is a key difference between @MockBean and Mockito's @Mock?
ABoth do the same thing
B<code>@Mock</code> replaces Spring beans, <code>@MockBean</code> does not
C<code>@MockBean</code> is only for integration tests
D<code>@MockBean</code> integrates with Spring context, <code>@Mock</code> does not
If multiple beans of the same type exist, how can you specify which one to mock with @MockBean?
AUse the <code>name</code> attribute in <code>@MockBean</code>
BYou cannot mock beans of the same type
CMock all beans automatically
DUse <code>@Mock</code> instead
What happens if @MockBean is used on a bean not defined in the Spring context?
ATest fails to start
BMock bean is added to the context anyway
CSpring ignores the annotation
DThe real bean is created instead
Explain how @MockBean helps isolate components during Spring Boot testing.
Think about how you can test one part without running the whole app.
You got /4 concepts.
    Describe the difference between @MockBean and Mockito's @Mock in Spring Boot tests.
    Consider how Spring manages beans and how mocks fit in.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using @MockBean in a Spring Boot test?
      easy
      A. To replace a real Spring bean with a mock for isolated testing
      B. To create a new Spring bean in the application context
      C. To automatically inject real dependencies into the test
      D. To configure database connections for integration tests

      Solution

      1. Step 1: Understand the role of @MockBean

        @MockBean is used to replace a real bean in the Spring context with a mock version during tests.
      2. Step 2: Identify the testing benefit

        This replacement helps isolate the component under test by faking dependencies, avoiding real implementations.
      3. Final Answer:

        To replace a real Spring bean with a mock for isolated testing -> Option A
      4. Quick Check:

        @MockBean replaces real beans [OK]
      Hint: Remember: @MockBean fakes dependencies for focused tests [OK]
      Common Mistakes:
      • Thinking @MockBean creates new beans instead of replacing
      • Confusing @MockBean with @Autowired injection
      • Using @MockBean to configure real database connections
      2. Which of the following is the correct way to declare a mock bean for a service named UserService in a Spring Boot test?
      easy
      A. @MockBean UserService userService = new UserService();
      B. @MockBean private UserService userService;
      C. @MockBean public void userService();
      D. @MockBean UserService userService();

      Solution

      1. Step 1: Recall @MockBean declaration syntax

        @MockBean is used as an annotation on a field to create a mock instance injected by Spring.
      2. Step 2: Check each option

        @MockBean private UserService userService; correctly declares a private field annotated with @MockBean. Other options use invalid syntax such as instantiating manually with new or declaring as methods.
      3. Final Answer:

        @MockBean private UserService userService; -> Option B
      4. Quick Check:

        @MockBean on private field [OK]
      Hint: Use @MockBean on private fields only [OK]
      Common Mistakes:
      • Trying to instantiate mock manually with new
      • Declaring @MockBean on methods instead of fields
      • Omitting access modifier or using invalid syntax
      3. Given this test snippet:
      @MockBean
      private PaymentService paymentService;
      
      @Test
      void testProcess() {
        when(paymentService.pay()).thenReturn(true);
        boolean result = paymentService.pay();
        System.out.println(result);
      }

      What will be printed when the test runs?
      medium
      A. null
      B. false
      C. true
      D. Exception thrown

      Solution

      1. Step 1: Understand mocking behavior

        The mock paymentService is told to return true when pay() is called using when().thenReturn(true).
      2. Step 2: Trace the method call

        Calling paymentService.pay() returns true as configured, so result is true and printed.
      3. Final Answer:

        true -> Option C
      4. Quick Check:

        Mock returns configured value = true [OK]
      Hint: Mock returns what you tell it with when().thenReturn() [OK]
      Common Mistakes:
      • Expecting default false instead of configured true
      • Confusing mock with real implementation output
      • Not setting up when().thenReturn() before call
      4. Consider this test code snippet:
      @MockBean
      private OrderService orderService;
      
      @Test
      void testOrder() {
        orderService.placeOrder();
        verify(orderService).placeOrder();
      }

      When running this test, it fails with a NullPointerException. What is the most likely cause?
      medium
      A. The orderService is not mocked properly because it is private
      B. The verify method is called before placeOrder()
      C. The placeOrder() method is final and cannot be mocked
      D. The @MockBean annotation was not processed because the test class lacks @SpringBootTest

      Solution

      1. Step 1: Check test setup requirements

        @MockBean requires Spring Boot test context to process annotations, usually via @SpringBootTest or similar.
      2. Step 2: Identify cause of NullPointerException

        If @MockBean is not processed, orderService remains null, causing NPE when calling placeOrder().
      3. Final Answer:

        The @MockBean annotation was not processed because the test class lacks @SpringBootTest -> Option D
      4. Quick Check:

        @MockBean needs Spring context [OK]
      Hint: Always use @SpringBootTest to enable @MockBean processing [OK]
      Common Mistakes:
      • Assuming private fields can't be mocked
      • Misordering verify and method calls
      • Not realizing final methods can't be mocked (but not cause NPE here)
      5. You have a Spring Boot service NotificationService that depends on EmailSender. You want to test NotificationService without sending real emails. Which setup correctly uses @MockBean to mock EmailSender and verify sendEmail() was called once during the test?
      hard
      A. Use @MockBean EmailSender emailSender; in the test class, call notificationService.notify(), then verify with verify(emailSender, times(1)).sendEmail();
      B. Use @Autowired EmailSender emailSender; and call sendEmail() directly in the test
      C. Create a new EmailSender instance manually and inject it into NotificationService
      D. Use @MockBean NotificationService notificationService; and verify sendEmail() on it

      Solution

      1. Step 1: Mock the dependency EmailSender

        Use @MockBean on EmailSender to replace the real bean with a mock in the test context.
      2. Step 2: Call the method under test and verify interaction

        Call notificationService.notify() which uses EmailSender internally, then verify sendEmail() was called once on the mock.
      3. Final Answer:

        Use @MockBean EmailSender emailSender; call notificationService.notify(); verify sendEmail() called once -> Option A
      4. Quick Check:

        Mock dependency, call service, verify mock call [OK]
      Hint: Mock dependencies, test service, verify mock interactions [OK]
      Common Mistakes:
      • Mocking the service instead of its dependency
      • Manually creating dependency instead of using @MockBean
      • Not verifying the mock method call properly
      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