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.