ActivityInstrumentationTestCase2 и проект библиотеки Android: не удается загрузить ресурсы - PullRequest
2 голосов
/ 13 июня 2011

У меня есть следующие настройки:

  • LibProjectWithActivity - проект библиотеки Android, который содержит PreviewActivity
  • AppProject - обычный проект Android, который использует LibProjectWithActivity
  • AppProjectTest - тестовый проект Android JUnit, представляющий собой ActivityInstumentationTestCase2

Прежде всего: все основные зависимости настроены правильно, потому что я могу отлично запустить свое приложение в эмуляторе, он показывает PreviewActivity все в порядке, все работает - здесь нет проблем.

Но я не могу запустить тест ... Вот настройки:

public class PreviewActivityTest 
      extends ActivityInstrumentationTestCase2<PreviewActivity> {
    public PreviewActivityTest() {
        // note: if i put "com.the7art.libprojectwithactivity" instead it wont find it
        // and will fail with "activity not found"
        super("com.the7art.appproject", PreviewActivity.class);
    }

    public void testDummy() {
        getActivity();
    }
}

Это вызывает исключение NullPointerException, как это:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.the7art.appproject/com.the7art.libprojectwithactivity.PreviewActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
    .......
Caused by: java.lang.NullPointerException
    at com.the7art.libprojectwithactivity.PreviewActivity.onCreate(PreviewActivity.java:37)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
    ... 11 more

Вот строки PreviewActivity.java:36,37:

mButtonAdd = (Button) findViewById(R.id.button_add);
mButtonAdd.setOnClickListener(this);

Таким образом, это исключение означает, что R.id.button_add (который находится в libproject) идеально найден, но представление по этому идентификатору не может быть найдено.Если я закомментирую этот код, то при попытке получить другой ресурс он будет схожим образом.

Похоже, что тест использует правильный R.java, но неправильный объект Context.Или что-то вроде этого.

Опять же, код приложения в порядке, потому что он работает в эмуляторе, что-то не так с настройкой теста ...

Любые подсказки о том, что не так и как исправитьэтот?

1 Ответ

1 голос
/ 17 августа 2011

Да, тест можно использовать только как проект Activity в качестве цели, посмотрите на projectTarget в вашем файле Test manifest.Это означает, что ваш тест может использовать тот же контекст, что и ваше приложение.Доступ только к ресурсам проекта приложения.Тем не менее, вы не можете получить доступ к ресурсам проекта библиотеки, вы можете использовать R.string.XX из проекта библиотеки, потому что он был создан впервые, и это только сгенерированный идентификатор, который будет использоваться в контексте приложения для поиска ресурса.Таким образом, результатом будет ошибка в найденном ресурсе или исключение не найденного ресурса.Есть 2 способа протестировать проект библиотеки, здесь они

...