Intereting Posts
Android конвертирует Px в Dp (соотношение сторон видео) Android, как добавить правильное дополнение к тексту в прядильщике? Android 2.3 Visualizer – понимание проблем getFft () Могу ли я использовать изображение из системы на кнопке или мне нужно нарисовать свое? Dimens.xml в папке значений для 7 "и 10" планшета, как? Android-устройство не отображается в списке adb Как мы можем проверить биллинговую квитанцию ​​на Android-стороне на стороне сервера? Невозможно объединить пользовательский заголовок с другими функциями заголовка Как запустить бесконечный цикл в Android без замораживания пользовательского интерфейса? Android Unit Test: как очистить SharedPreferences Андроид: как позвонить номеру с помощью приложения android Легкий способ сделать выбор в ListPreference на Android? FFMpeg jni в Android? Ориентация на наиболее подходящий API Невозможно разрешить хост «<insert URL here>» Нет адреса, связанного с именем хоста

AndroidHttpClient не найден (при работе Robolectric)

Я создал очень простой проект для тестирования интеграции Robolectric + Data Binding + Retrolambda. Когда я запускаю тестовый костюм, я получаю следующее сообщение:

Error:(30, 30) Gradle: error: cannot access AndroidHttpClient class file for android.net.http.AndroidHttpClient not found 

Это довольно странно, так как я не использую AndroidHttpClient нигде.


Ошибка возникает здесь, в строке «Активность»:

 @Before public void setup() { activity = Robolectric.setupActivity(MainActivity.class); // Error on this line textView = (TextView) shadowOf(activity).findViewById(R.id.textView); button = (Button) activity.findViewById(R.id.button); editText = (EditText) activity.findViewById(R.id.editText); } 

В программе никогда не используется AndroidHttpClient. Фактически, это вся программа:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setUser(new User()); binding.button.setOnClickListener((v) -> { binding.textView.setText(String.format("Hello, %s!", binding.editText.getText())); binding.editText.setText(""); }); } 

Идеи о том, что не так?

AndroidHttpClient был удален из SDK в v23 инструментов сборки.

Поскольку Robolectric работает с более ранними версиями, он ожидает, что он будет там, поэтому вы видите эту ошибку.

Пока вы можете добавить его обратно:

 android { useLibrary 'org.apache.http.legacy' } 

Как подробно описано здесь .

Для Robolectric есть билет GitHub, который исправляет это. Вы можете следить за нитью / билетом здесь .

Я только что добавил поддельный класс android.net.http.AndroidHttpClient в моих тестовых источниках. И на этот раз он решил проблему. Ожидание обновления Robolectric

Очевидная проблема и решение:

AndroidHttpClient был удален из SDK на уровне API 23, в то время как Robolectric был настроен на запуск тестов с SDK 21:

 AndroidHttpClient was removed from the SDK in API Level 23 

Я смог решить эту проблему, создав новый класс под названием AndroidHttpClient в новом пакете android.net.http . После этого мне пришлось аннотировать мой класс Unit Test с помощью @Config(constants = BuildConfig.class, sdks = 21) который будет запускать тесты против эмулируемой версии API 21, которая в настоящее время является последней версией поддержки Android Robolectric.

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