Class PropertyAndSetterInjection


  • public class PropertyAndSetterInjection
    extends MockInjectionStrategy
    Inject mocks using first setters then fields, if no setters available.

    Algorithm :
    for each field annotated by @InjectMocks

    • initialize field annotated by @InjectMocks
    • for each fields of a class in @InjectMocks type hierarchy
      • make a copy of mock candidates
      • order fields rom sub-type to super-type, then by field name
      • for the list of fields in a class try two passes of :
        • find mock candidate by type
        • if more than *one* candidate find mock candidate on name
        • if one mock candidate then
          • set mock by property setter if possible
          • else set mock by field injection
        • remove mock from mocks copy (mocks are just injected once in a class)
        • remove injected field from list of class fields
      • else don't fail, user will then provide dependencies

    Note: If the field needing injection is not initialized, the strategy tries to create one using a no-arg constructor of the field type.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean processInjection​(java.lang.reflect.Field injectMocksField, java.lang.Object injectMocksFieldOwner, java.util.Set<java.lang.Object> mockCandidates)
      Process actual injection.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • PropertyAndSetterInjection

        public PropertyAndSetterInjection()
    • Method Detail

      • processInjection

        public boolean processInjection​(java.lang.reflect.Field injectMocksField,
                                        java.lang.Object injectMocksFieldOwner,
                                        java.util.Set<java.lang.Object> mockCandidates)
        Description copied from class: MockInjectionStrategy
        Process actual injection.

        Don't call this method directly, instead call MockInjectionStrategy.process(Field, Object, Set)

        Specified by:
        processInjection in class MockInjectionStrategy
        Parameters:
        injectMocksField - Field needing injection
        injectMocksFieldOwner - Field owner instance.
        mockCandidates - Pool of mocks to inject.
        Returns:
        true if injection occurred, false otherwise