Это не вопрос, как я нашел решение проблемы. Просто надеюсь, что это поможет другим, кто может столкнуться с этим.Robolectric использует неверный идентификатор ресурса из библиотеки при раздувании зрения
Мы используем Robolectric для написания модульных тестов для проекта, который использует библиотеку (на самом деле несколько библиотек). Библиотеки, а также приложение используют много ресурсов.
Предположим, что рабочее пространство Eclipse содержит библиотеку проектов (с пакетом «library.package» как верхний пакет), который создает библиотеку Android и приложение проекта (с «app.package» вверху), которое использует библиотеку. проект Test - это проект Robolectric, который относится к проекту приложения.
Внезапно мы обнаружили, что очень простой тест, который проверяет существование определенного вида в действии, терпит неудачу. Например:
@Test
public void testProgressBarInit() {
LoginActivity activity = Robolectric.buildActivity(LoginActivity.class).create().get();
assertTrue(activity.findViewById(R.id.status_text) instanceof TextView);
}
Проект библиотеки реализует LoginActivity и определяет соответствующие ресурсы (макет). Неудачные тесты выполняются отлично, прежде чем мы изменили структуру кода, немного устранив еще одну библиотеку.
Выполнение теста под отладчиком показало, что вызов findViewById использует правильное значение R.id.status_text, взятое из файла Application/gen/R.java. В то же время мы обнаружили, что значение текста R.id.status в приложении/gen/R.java отличается от значения в Library/gen/R.java. Кроме того, каталог Appication/gen содержит файл library.package.R.java, который содержит то же значение для status_text, что и в приложении/gen/R.java (что отличается от исходного в библиотеке/gen/R.java). Это нормальное поведение инструмента aapt, который может изменять идентификаторы ресурсов при объединении ресурсов из библиотеки и приложения.