Вызов действия из AndroidTestCase - PullRequest
3 голосов
/ 25 марта 2011

Я пишу тестовый набор для Android, который требует выполнения отдельного действия для тестируемого действия (не ради тестирования, а просто для получения доступа к контент-резольверу, чтобы я мог изменить некоторые параметры телефонии).

Возможно ли вообще запустить действие из тестового примера или иным способом.

Мне известен класс AndroidTestCase, используемый для тестирования действий, и я использую его в своих тестах, однако яМне нужно использовать ContentResolver для изменения настроек телефонии, а затем проверить реакцию тестируемого действия, поэтому мне нужен другой компонент приложения для изменения этих настроек.

Примечание. Я раскрываю сложность, стоящую за множественным тестированием активности (требуется ActivityManager), но я хочу использовать только его метод для изменения настроек, чтобы у меня даже была логика в методе onCreate.

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Android предоставляет специальный инструментарий для тестирования деятельности.Вы должны использовать эту платформу, так как действия имеют сложный жизненный цикл, который нельзя вызвать вне этой предоставленной платформы.Посмотрите ссылку Тестирование в разделе Разработки документации Android для Тестирование активности .Если это не отвечает на ваш вопрос, вы можете немного перефразировать его.

Редактировать

Вы действительно должны расширять ActivityUnitTestCase для тестирования Activity, а не AndroidTestCase.Вы получаете больше функциональности, специфичной для того, что вам нужно проверить.Если вы расширяете ActivityUnitTestCase, существует функция с именем launchActivity.Он запустит нужное вам действие и предоставит вам экземпляр действия, чтобы вы могли вызывать для него такие методы, как set, get и finish.Это должно делать все, что вам нужно для управления одним и несколькими действиями одновременно.

Пример кода:

@MediumTest
public class Test extends ActivityUniTestCase<HelloActivity> {

    public Test(Class<HelloActivity> activityClass) {
        super(activityClass);
    }

    @MediumTest
    public void testLifeCycleCreate() {
        HelloActivity hActivity = startActivity(new Intent(Intent.ACTION_MAIN), null, null);
        getInstrumentation().callActivityOnStart(hActivity);
        getInstrumentation().callActivityOnResume(hActivity);

        GoodByeActivity gActivity = launchActivity("package.goodbye", GoodByeActivity.class, null);
        gActivity.finish();
    }
}
2 голосов
/ 13 апреля 2011

AndroidTestCase и ActivityInstrumentationTestCase2 оба предоставляют методы для получения контекста

AndroidTestCase:

getContext();

ActivityInstrumentationTestCase2

getInstrumentation().getContext();

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

В моем случае это бесполезно, поэтому мне пришлось создать отдельное приложение с собственными разрешениями и фоновой службой, которой я мог управлять, запуская намерения с помощью контекста.

...