Я создал очень простой проект для тестирования интеграции 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, все должно быть хорошо, и вам не придется использовать это обходное решение.