2016-04-04 7 views
0

Я пишу модульные тесты/интеграционные тесты, которые вызывают библиотеку классов, которая использует объекты HttpsURLConnection. Много раз при вызове методов на объектах соединения через модульные тесты, например addRequestProperty, setDoOutput, setRequestMethod Я получаю исключения, такие как java.lang.IllegalStateException: Already connected. Поведение, скорее всего, связано с тем, что в градиенте следуют значения по умолчанию.Как провести тестирование с помощью HttpURLConnection в Android?

testOptions { 
    unitTests.returnDefaultValues = true 
} 

См http://tools.android.com/tech-docs/unit-testing-support для более подробной информации

тот же код работает отлично в App. Есть ли способ использовать реальный объект HttpsURLConnection во время тестирования?

+0

Похоже, я должен написать тестовые примеры, как описано в http://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html, поскольку HttpsURLConnection является частью android. – resp78

ответ

0

Поскольку HttpsURLConnection является частью андроида, один способ тестирования будет использовать Android Instrumented Tests, как описано в http://developer.android.com/training/testing/start/index.html. Это запускает AVD или реальное устройство и проводит там тесты.

Убедитесь, что вы установите разрешение в AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

1

Вы можете использовать библиотеки издеваться запросов и ответов. Я рекомендую этот: MockWebServer.

Edit: После перечитывания вашего вопроса, это выглядит, как вы хотите использовать HttpsURLConnection в модульных тестах. Проблема использования класса из Android SDK в тесте Unit означает, что ваш тест станет контрольным, и это означает, что он должен работать на устройстве/эмуляторе.

Если вы хотите привести примеры тестов на интеграцию, взгляните на отличный пример this.

Поскольку HttpsURLConnection также входит в комплект Java JDK, если вы используете этот класс (import javax.net.ssl), у вас может быть изменение не использования каких-либо классов Android, поэтому вы можете запустить свой тест в качестве теста локального модуля в ваш JVM (не устройство/эмулятор).

Если вы хотите понять немного лучше разницу между инструментальными и местными блочными тестами, прочитайте this сообщение в блоге.

+0

Идея заключается в проведении интеграционных тестов с реальными серверами. – resp78