android data-binding robolectric retrolambda

AndroidHttpClient no encontrado(al ejecutar Robolectric)



data-binding retrolambda (4)

He creado un proyecto muy simple para probar la integración de Robolectric + Data Binding + Retrolambda. Cuando ejecuto el traje de prueba, recibo el siguiente mensaje:

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

Esto es bastante extraño ya que no uso AndroidHttpClient en ninguna parte.

El error ocurre aquí, en la línea de "actividad":

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

El programa nunca usa AndroidHttpClient. De hecho, este es el programa completo:

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

Ideas sobre lo que está mal?


Acabo de agregar la clase falsa android.net.http.AndroidHttpClient en mis fuentes de prueba. Y resolvió el problema por ahora. Esperando a que Robolectric se actualice


Problema y solución aparente:

AndroidHttpClient se eliminó del SDK en API Level 23, mientras que Robolectric se estableció para ejecutar pruebas con SDK 21:

AndroidHttpClient was removed from the SDK in API Level 23


Pude resolver este problema creando una nueva clase llamada AndroidHttpClient dentro de un nuevo paquete android.net.http . Después de eso tuve que anotar mi clase de prueba de unidad con @Config(constants = BuildConfig.class, sdks = 21) que ejecutará las pruebas contra una versión emulada de API 21, que es la última versión de Android compatible con Robolectric actualmente.

Actualmente hay un problema abierto here , por lo que una vez que publiquen la versión 3.1 todo estará bien y no tendrá que usar esta solución alternativa.


AndroidHttpClient se eliminó del SDK en v23 de las herramientas de compilación.

Como Robolectric se está ejecutando en versiones anteriores, espera que esté allí, por lo que está viendo este error.

Por ahora, puedes agregarlo de nuevo en:

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

Como se detalla here .

Hay un boleto de GitHub abierto para que Robolectric solucione esto. Puedes seguir el hilo / ticket here .

Actualizar:

Como algunas personas han señalado correctamente, una mejor forma de hacerlo sería crear una clase android.net.http.AndroidHttpClient en sus recursos de prueba. Este sería un método preferido porque solo está modificando las fuentes de prueba, no el código de producción, para acomodar las pruebas.