Class PropertyAndSetterInjection
java.lang.Object
org.mockito.internal.configuration.injection.MockInjectionStrategy
org.mockito.internal.configuration.injection.PropertyAndSetterInjection
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 from 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.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final MockCandidateFilter
private final ListUtil.Filter<Field>
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate FieldInitializationReport
initializeInjectMocksField
(Field field, Object fieldOwner) private boolean
injectMockCandidates
(Class<?> awaitingInjectionClazz, Object injectee, Set<Object> mocks) private boolean
injectMockCandidatesOnFields
(Set<Object> mocks, Object injectee, boolean injectionOccurred, List<Field> orderedCandidateInjecteeFields) orderedInstanceFieldsFrom
(Class<?> awaitingInjectionClazz) boolean
processInjection
(Field injectMocksField, Object injectMocksFieldOwner, Set<Object> mockCandidates) Process actual injection.Methods inherited from class org.mockito.internal.configuration.injection.MockInjectionStrategy
nop, process, thenTry
-
Field Details
-
mockCandidateFilter
-
notFinalOrStatic
-
-
Constructor Details
-
PropertyAndSetterInjection
public PropertyAndSetterInjection()
-
-
Method Details
-
processInjection
public boolean processInjection(Field injectMocksField, Object injectMocksFieldOwner, Set<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 classMockInjectionStrategy
- Parameters:
injectMocksField
- Field needing injectioninjectMocksFieldOwner
- Field owner instance.mockCandidates
- Pool of mocks to inject.- Returns:
true
if injection occurred,false
otherwise
-
initializeInjectMocksField
-
injectMockCandidates
-
injectMockCandidatesOnFields
-
orderedInstanceFieldsFrom
-