Подтвердить что ты не робот

AndroidHttpClient не найден (при запуске Robolectric)

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

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

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


Ошибка происходит здесь, в строке "activity":

@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("");
    });
}

Идеи относительно того, что неправильно?

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

Ответ 3

Явная проблема и решение:

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

AndroidHttpClient was removed from the SDK in API Level 23

Ответ 4

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

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