Статический внутренний класс Robolectric shadow

Я использую Robolectric для модульного тестирования своего кода. Я использую отражение на android.os.Build.VERSION_CODES.

Field[] fields = VERSION_CODES.class.getFields();

Первым элементом в этом массиве полей является public java.lang.Object android.os.Build$VERSION_CODES.robo_data . Я хочу удалить это поле из массива полей. Я попытался написать теневую реализацию для VERSION_CODES (статический внутренний класс в android.os.Build)

@Implements(VERSION_CODES.class)
class ShadowBuildVersionCodes {
    public static final int BASE = 1;
    public static final int BASE_1_1 = 2;
    public static final int CUPCAKE = 3;
    public static final int CUR_DEVELOPMENT = 10000;
    public static final int DONUT = 4;
    public static final int ECLAIR = 5;
    public static final int ECLAIR_0_1 = 6;
    public static final int ECLAIR_MR1 = 7;
    public static final int FROYO = 8;
    public static final int GINGERBREAD = 9;
    public static final int GINGERBREAD_MR1 = 10;

    public void _constructor_ () {

    }
}

Также добавил это как конфигурацию в мой тестовый пример

@Config(shadows={ShadowBuildVersionCodes.class})

Похоже, это не работает, так как массив полей по-прежнему показывает общедоступный java.lang.Object android.os.Build$VERSION_CODES.robo_data в качестве первого элемента. Пожалуйста, помогите мне скрыть этот класс VERSION_CODES.


person user3740951    schedule 05.04.2017    source источник
comment
Можете ли вы поделиться кодом, который вы тестируете?   -  person Eugen Martynov    schedule 06.04.2017
comment
Field[] fields = VERSION_CODES.class.getFields(); for(int i = 0; i ‹ fields.length; ++i) { Field aField = fields[i]; попробуйте {int e = aField.getInt((Object)null); } } catch (IllegalAccessException var5) { var5.printStackTrace(); } }   -  person user3740951    schedule 07.04.2017
comment
Да, ясно. Но какова цель?   -  person Eugen Martynov    schedule 07.04.2017
comment
Есть ли способ заставить это работать? Может ли кто-нибудь помочь мне?   -  person user3740951    schedule 19.04.2017


Ответы (1)


Извините, но это не совсем возможно.

__robo_data__ (имя было изменено после того, как был задан первоначальный вопрос) — один из побочных эффектов инструментария Robolectric для кода.

Из-за этого лучшим подходом было бы игнорировать поля, которые не являются целыми числами.

person Nicole Borrelli    schedule 20.11.2018