类org.mockito.internal.util.reflection.FieldReader源码实例Demo

下面列出了怎么用org.mockito.internal.util.reflection.FieldReader的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: COLA   文件: SpyHelper.java
private void processInjectAnnotation(Class clazz){
    Set<Field> mockDependentFields = new HashSet<Field>();
    new InjectAnnotationScanner(clazz, Inject.class).addTo(mockDependentFields);
    new InjectAnnotationScanner(clazz, InjectOnlyTest.class).addTo(mockDependentFields);

    for(Field f : mockDependentFields){
        FieldReader fr = new FieldReader(owner, f);
        Object value = null;
        if(!fr.isNull()){
            value = fr.read();
        }
        boolean isMockOrSpy = isMockOrSpy(value);
        if(value != null && isMockOrSpy){
            Mockito.reset(value);
            continue;
        }
        if(value == null){
            value = Mockito.spy(f.getType());
        }
        //spy会新生成对象,导致从容器中脱离
        //else{
        //    value = Mockito.spy(value);
        //}
        new FieldSetter(owner, f).set(value);
    }
}
 
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);
}
 
源代码3 项目: astor   文件: SpyOnInjectedFieldsHandler.java
@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;
}
 
源代码4 项目: astor   文件: MockScanner.java
/**
 * 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;
}
 
 类所在包
 同包方法