public void addToActivity(@NonNull Object target, Fragment fragment) { String tag = null; for (Field fragmentField : fragmentFields) { Fragment fragmentOfField = (Fragment) new FieldReader(target, fragmentField).read(); if (fragment == fragmentOfField) { RFragment fragmentAnnotation = fragmentField.getAnnotation(RFragment.class); tag = fragmentAnnotation.tag(); } } if (tag == null || tag.isEmpty()) { tag = fragment.getClass().toString(); } ControllerActivity controllerActivity = getAndroidUnitTest().activity(); //if no activity is create, the default activity manager behaviour is to create one if (controllerActivity.get() == null) { controllerActivity.createAndInitActivity(FragmentActivity.class, null); controllerActivity.setActivityState(ActivityState.CREATED); } AnnotationFragmentManager.addToActivity(getActivity(), fragment, tag); }
private Object readField(Object obj, String field) { try { Class clazz = obj.getClass(); if (clazz.getName().contains("$")) { clazz = clazz.getSuperclass(); } Field executorField = clazz.getDeclaredField(field); FieldReader fieldReader = new FieldReader(obj, executorField); return fieldReader.read(); } catch (NoSuchFieldException e) { Assert.fail(e.getMessage()); } return null; }
@Override protected boolean processInjection(Field field, Object fieldOwner, Set<Object> mockCandidates) { FieldReader fieldReader = new FieldReader(fieldOwner, field); // TODO refoctor : code duplicated in SpyAnnotationEngine if(!fieldReader.isNull() && field.isAnnotationPresent(Spy.class)) { try { Object instance = fieldReader.read(); if (new MockUtil().isMock(instance)) { // A. instance has been spied earlier // B. protect against multiple use of MockitoAnnotations.initMocks() Mockito.reset(instance); } else { new FieldSetter(fieldOwner, field).set( Mockito.mock(instance.getClass(), withSettings() .spiedInstance(instance) .defaultAnswer(Mockito.CALLS_REAL_METHODS) .name(field.getName())) ); } } catch (Exception e) { throw new MockitoException("Problems initiating spied field " + field.getName(), e); } } return false; }
/** * Scan and prepare mocks for the given <code>testClassInstance</code> and <code>clazz</code> in the type hierarchy. * * @return A prepared set of mock */ private Set<Object> scan() { Set<Object> mocks = newMockSafeHashSet(); for (Field field : clazz.getDeclaredFields()) { // mock or spies only FieldReader fieldReader = new FieldReader(instance, field); Object mockInstance = preparedMock(fieldReader.read(), field); if (mockInstance != null) { mocks.add(mockInstance); } } return mocks; }