Class Injector

java.lang.Object
org.easymock.internal.Injector

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

    • Injector

      public Injector()
  • Method Details

    • injectMocks

      public static void injectMocks(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
    • instantiateTestSubject

      static <T> T instantiateTestSubject(Field f)
    • createMocksForAnnotations

      private static void createMocksForAnnotations(Class<?> hostClass, 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(Class<?> clazz, 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 List<Field> injectByName(Class<?> clazz, Object obj, List<Injection> qualifiedInjections)
    • injectByType

      private static void injectByType(Object obj, List<Field> fields, List<Injection> injections)
    • fieldsOf

      private static List<Field> fieldsOf(Class<?> clazz)
    • getFieldByName

      private static Field getFieldByName(Class<?> clazz, String fieldName)
    • injectionTargetWithField

      private static InjectionTarget injectionTargetWithField(Field f)
    • shouldNotAssignTo

      private static boolean shouldNotAssignTo(Field f)
    • findUniqueAssignable

      private static Injection findUniqueAssignable(List<Injection> injections, InjectionTarget target)