Можно ли делать реальные HTTP-запросы с robolectric - PullRequest
10 голосов
/ 28 февраля 2012

Проблема, с которой я столкнулся при работе с robolectric, заключается в том, что он не создает настоящих запросов Http.

Могу ли я заменить реализацию робота HttpClient на реальную, фактически выполняющую вызовы на мой локальный тестовый сервер?

Ответы [ 2 ]

16 голосов
/ 20 марта 2012

Ян Беркель подал запрос на получение в Robolectric, который был объединен с мастером 8 марта.Теперь вы можете позвонить Robolectric.getFakeHttpLayer().interceptHttpRequests(false); в начале теста, чтобы обойти смоделированный слой http в Robolectric.

Вы можете скачать банку прямо с Sonatype , чтобы включить ее в свой проект Eclipse Android.Если вы используете Maven, а 1.1 еще не выпущен (проверьте по URL-адресу Sonatype выше), вам нужно будет добавить репозиторий моментальных снимков sonatype и использовать robolectric 1.1-SNAPSHOT.Вы можете сделать это, добавив следующее в ваш pom.xml

<repositories>
    <repository>
        <id>sonatype-snapshots</id>
        <name>Sonatype Snapshots</name>
        <layout>default</layout>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
...
<dependencies>
   <dependency>
        <groupId>com.pivotallabs</groupId>
        <artifactId>robolectric</artifactId>
        <version>1.1-SNAPSHOT</version>
        <scope>test</scope>
    </dependency>
    ...
</dependencies>

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

2 голосов
/ 28 февраля 2012

По сути, вы этого не делаете. Robolectric - это тестовый фреймворк, и он так устроен, что вы спрашивали не о том, что мы делаем с Robolectric.

Я уверен, что вы наткнулись на этот блог об использовании Robolectric тестовых HTTP-запросов. На самом деле заголовок «Как проверять HTTP-запросы» не совсем точный IMO. Я бы скорее назвал это «Как имитировать HTTP-запросы» , как указано в этом блоге, лучшее место для использования Robolectric mock http-запроса - это то, где вы действительно не хотите беспокоить реальные сетевые вызовы на удаленный сервер. возможно на этапе разработки / тестирования проекта.

Предположим, у меня есть какое-то основное действие, связанное с моим банковским счетом для какой-либо операции, кнопка отправки должна опубликовать мою входную информацию на удаленном сервере, обновить данные моей учетной записи, а затем, основываясь на разных ответах, привести меня к нескольким различным действиям. Я написал весь код гладко, HttpClient, форму с кнопкой отправки, новое намерение к следующему действию и т. Д. Все красиво и чисто. Правильно, как я могу протестировать, когда нажимаю кнопку «Отправить», открывается правильное действие на основе этих разных ответов, без необходимости изменять исходный код моего действия или использовать реальный сетевой вызов, чтобы испортить мой реальный банковский счет. Ответ Robolectric макет HTTP-запроса. Ключевым моментом использования Robolectric в этом случае является не тестирование реального http-запроса, а использование его для обмана моего кода httpClient и тестирования другой части кода моего приложения, например, пользовательского интерфейса. В конечном счете, тестирование реальной сети должно выполняться на эмуляторе или реальном устройстве на некотором этапе, когда ваше развертывание приходит в окончательное стабильное состояние.

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

...