Class Injector


  • public class Injector
    extends java.lang.Object
    Performs creation of mocks and injection into test subjects in accordance with annotations present in the host object.
    Since:
    3.3
    • Constructor Detail

      • Injector

        public Injector()
    • Method Detail

      • injectMocks

        public static void injectMocks​(java.lang.Object host)
        Inject a mock to every fields annotated with Mock on the class passed in parameter. Then, inject these mocks to the fields of every class annotated with TestSubject.

        The rules are

        • Static and final fields are ignored
        • If two mocks have the same field name, return an error
        • If a mock has a field name and no matching field is found, return an error
        Then, ignoring all fields and mocks matched by field name
        • If a mock without field name can be assigned to a field, do it. The same mock can be assigned more than once
        • If no mock can be assigned to a field, skip the field silently
        • If the mock cannot be assigned to any field, skip the mock silently
        • If two mocks can be assigned to the same field, return an error
        Fields are searched recursively on the superclasses

        Note: If the parameter extends EasyMockSupport, the mocks will be created using it to allow replayAll/verifyAll to work afterwards

        Parameters:
        host - the object on which to inject mocks
        Since:
        3.2
      • createMocksForAnnotations

        private static void createMocksForAnnotations​(java.lang.Class<?> hostClass,
                                                      java.lang.Object host,
                                                      InjectionPlan injectionPlan)
        Create the mocks and find the fields annotated with TestSubject
        Parameters:
        hostClass - class to search
        host - object of the class
        injectionPlan - output parameter where the created mocks and fields to inject are added
      • mockTypeFromAnnotation

        private static MockType mockTypeFromAnnotation​(Mock annotation)
      • injectMocksOnClass

        private static void injectMocksOnClass​(java.lang.Class<?> clazz,
                                               java.lang.Object obj,
                                               InjectionPlan injectionPlan)
        Try to inject a mock to every fields in the class
        Parameters:
        clazz - class where the fields are taken
        obj - object being a instance of clazz
        injectionPlan - details of possible mocks for injection
      • injectByName

        private static java.util.List<java.lang.reflect.Field> injectByName​(java.lang.Class<?> clazz,
                                                                            java.lang.Object obj,
                                                                            java.util.List<Injection> qualifiedInjections)
      • injectByType

        private static void injectByType​(java.lang.Object obj,
                                         java.util.List<java.lang.reflect.Field> fields,
                                         java.util.List<Injection> injections)
      • fieldsOf

        private static java.util.List<java.lang.reflect.Field> fieldsOf​(java.lang.Class<?> clazz)
      • getFieldByName

        private static java.lang.reflect.Field getFieldByName​(java.lang.Class<?> clazz,
                                                              java.lang.String fieldName)
      • injectionTargetWithField

        private static InjectionTarget injectionTargetWithField​(java.lang.reflect.Field f)
      • shouldNotAssignTo

        private static boolean shouldNotAssignTo​(java.lang.reflect.Field f)