org.springframework.boot.test.mock.mockito

Annotation Type MockBean



  • @Target(value={TYPE,FIELD})
     @Retention(value=RUNTIME)
     @Documented
     @Repeatable(value=MockBeans.class)
    public @interface MockBean
    Annotation that can be used to add mocks to a Spring ApplicationContext. Can be used as a class level annotation or on fields in either @Configuration classes, or test classes that are @RunWith the SpringRunner.

    Mocks can be registered by type or by bean name. Any existing single bean of the same type defined in the context will be replaced by the mock. If no existing bean is defined a new one will be added. Dependencies that are known to the application context but are not beans (such as those registered directly) will not be found and a mocked bean will be added to the context alongside the existing dependency.

    When @MockBean is used on a field, as well as being registered in the application context, the mock will also be injected into the field. Typical usage might be:

     @RunWith(SpringRunner.class)
     public class ExampleTests {
    
         @MockBean
         private ExampleService service;
    
         @Autowired
         private UserOfService userOfService;
    
         @Test
         public void testUserOfService() {
             given(this.service.greet()).willReturn("Hello");
             String actual = this.userOfService.makeUse();
             assertEquals("Was: Hello", actual);
         }
    
         @Configuration
         @Import(UserOfService.class) // A @Component injected with ExampleService
         static class Config {
         }
    
    
     }
     
    If there is more than one bean of the requested type, qualifier metadata must be specified at field level:
     @RunWith(SpringRunner.class)
     public class ExampleTests {
    
         @MockBean
         @Qualifier("example")
         private ExampleService service;
    
         ...
     }
     

    This annotation is @Repeatable and may be specified multiple times when working with Java 8 or contained within an @MockBeans annotation.

    Since:
    1.4.0
    Author:
    Phillip Webb
    See Also:
    MockitoPostProcessor
    • Optional Element Summary

      Optional Elements 
      Modifier and Type Optional Element and Description
      org.mockito.Answers answer
      The Answers type to use on the mock.
      Class<?>[] classes
      The classes to mock.
      Class<?>[] extraInterfaces
      Any extra interfaces that should also be declared on the mock.
      String name
      The name of the bean to register or replace.
      MockReset reset
      The reset mode to apply to the mock bean.
      boolean serializable
      If the generated mock is serializable.
      Class<?>[] value
      The classes to mock.
    • Element Detail

      • name

        public abstract String name
        The name of the bean to register or replace. If not specified the name will either be generated or, if the mock replaces an existing bean, the existing name will be used.
        Returns:
        the name of the bean
        Default:
        ""
      • value

        @AliasFor(value="classes")
        public abstract Class<?>[] value
        The classes to mock. This is an alias of classes() which can be used for brevity if no other attributes are defined. See classes() for details.
        Returns:
        the classes to mock
        Default:
        {}
      • classes

        @AliasFor(value="value")
        public abstract Class<?>[] classes
        The classes to mock. Each class specified here will result in a mock being created and registered with the application context. Classes can be omitted when the annotation is used on a field.

        When @MockBean also defines a name this attribute can only contain a single value.

        If this is the only specified attribute consider using the value alias instead.

        Returns:
        the classes to mock
        Default:
        {}
      • extraInterfaces

        public abstract Class<?>[] extraInterfaces
        Any extra interfaces that should also be declared on the mock. See MockSettings.extraInterfaces(Class...) for details.
        Returns:
        any extra interfaces
        Default:
        {}
      • answer

        public abstract org.mockito.Answers answer
        The Answers type to use on the mock.
        Returns:
        the answer type
        Default:
        org.mockito.Answers.RETURNS_DEFAULTS
      • serializable

        public abstract boolean serializable
        If the generated mock is serializable. See MockSettings.serializable() for details.
        Returns:
        if the mock is serializable
        Default:
        false
      • reset

        public abstract MockReset reset
        The reset mode to apply to the mock bean. The default is MockReset.AFTER meaning that mocks are automatically reset after each test method is invoked.
        Returns:
        the reset mode
        Default:
        org.springframework.boot.test.mock.mockito.MockReset.AFTER