Тестовый класс Android не может быть скомпилирован в затмении с ошибкой «связанное несоответствие» - PullRequest
6 голосов
/ 18 февраля 2011

Я пишу тестовые случаи для приложения для Android с расширением ActivityInstrumentationTestCase2.Класс теста выглядит следующим образом:

public class SolutionEntryActivityTest extends ActivityInstrumentationTestCase2<SolutionEntryActivity> {

    public SolutionEntryActivityTest() {

        super(SolutionEntryActivity.class);
    }
}

В Eclipse этот код не может быть скомпилирован с ошибкой: Bound mismatch: The type SolutionEntryActivity is not a valid substitute for the bounded parameter <T extends Activity> of the type ActivityInstrumentationTestCase2<T>

Но SolutionEntryActivity действительно является android.app.Activity, иерархия типовкак это:

Activity
    OrmLiteBaseActivity<H> (abstract)
        KabowieActivity
            PracticeActivity (abstract)
                SolutionEntryActivity

Я обнаружил две ошибки затмения из 2004 и 2005 , которые, похоже, имеют дело с аналогичной проблемой, но их следует долго исправлять.

Я использую Eclipse Helios с Android 2.2 и Sun Java 1.6.

Есть идеи, что происходит?

1 Ответ

5 голосов
/ 19 февраля 2011

Проблема заключалась в том, что при создании тестового проекта с проектом android eclipse ссылки из тестируемого проекта на внешние библиотеки не разрешаются автоматически.Класс OrmLiteBaseActivity (см. Иерархию типов в исходном вопросе) происходит от внешнего jar-файла, включенного в путь сборки тестируемого проекта.Этот внешний jar-файл также должен быть явно включен в путь сборки тестового проекта.Не уверен, что это можно считать ошибкой, и если да, то где.Но я ожидаю, что все библиотеки, используемые исходным проектом, также должны быть доступны для тестового проекта.В любом случае, спасибо тем, кто прочитал вопрос.

EDIT Исправление: добавление одной и той же библиотеки в buildpath дважды (один раз в один из тестируемого проекта и один раз в testproject)не работает, потому что JUnit не понимает, что это действительно одна и та же библиотека.Компиляция завершится успешно, но LogCat выдаст сообщение об ошибке, в котором говорится, что суперклассы SolutionEntryActivity получены из разных источников.Решение здесь заключается в том, чтобы экспортировать внешние библиотеки из исходного проекта (Настроить buildpath -> Порядок и экспорт -> выбрать библиотеки для экспорта) вместо непосредственного добавления их в путь сборки тестового проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...