AndroidHttpClient nicht gefunden (wenn Robolectric)
Ich habe ein sehr einfaches Projekt zum testen der integration von Robolectric + Data Binding + Retrolambda. Wenn ich den test ausführen, Anzug, bekomme ich folgende Meldung:
Error:(30, 30) Gradle: error: cannot access AndroidHttpClient
class file for android.net.http.AndroidHttpClient not found
Dies ist ziemlich merkwürdig, da ich nicht verwenden AndroidHttpClient überall.
Tritt der Fehler hier auf die "Aktivität" Zeile:
@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);
}
Das Programm nie verwendet AndroidHttpClient. In der Tat, dies ist das gesamte Programm:
@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("");
});
}
Ideen, was ist falsch?
AndroidHttpClient
wurde entfernt aus dem SDK-API-Level 23, also, wenn IhrcompileSdkVersion
ist 23 oder höher, das würde erklären, warum die Klasse nicht gefunden werden kann. Warum Robolectric zuzugreifen versucht, die Klasse, das kann ich nicht sagen.- Dass es behoben! Ich war mit der Ausführung der tests mit: "@Config(Konstanten = BuildConfig.class, sdk = 21)". Danke!
- Schreiben Sie eine Antwort, damit alle profitieren
Du musst angemeldet sein, um einen Kommentar abzugeben.
AndroidHttpClient
wurde entfernt aus dem SDK in v23 von den build-tools.Als Robolectric läuft gegen den früheren Versionen, es erwartet Sie da zu sein, das ist, warum Sie sehen, wie dieser Fehler.
Für jetzt, Sie können es hinzufügen, wieder in:
Detaillierte hier.
Gibt es ein GitHub-ticket öffnen für Robolectric, um dieses Problem zu beheben. Sie können Folgen Sie den thread/ticket hier.
Update:
Einige Menschen haben richtig darauf hingewiesen, einen besseren Weg, dies zu tun, wäre eine Klasse
android.net.http.AndroidHttpClient
im test-Ressourcen. Dies wäre eine bevorzugte Methode, weil Sie nur ändern der test-Quellen, die nicht der Produktion code, um Platz für die tests.Habe ich nur Hinzugefügt, fake Klasse
android.net.http.AndroidHttpClient
in meinem test-Quellen. Und es löste das Problem für jetzt. Warten für Robolectric aktualisiert werdenuseLibrary
Ergebnisse in extra-items gebündelt in Ihre Haupt-app in der Erwägung, dass das hinzufügen dieser Klasse untersrc/test/java
hat keine Auswirkungen auf die main-app.Scheinbare problem und Lösung:
AndroidHttpClient wurde entfernt aus dem SDK-API-Level-23, während die Robolectric wurde eingestellt, um tests mit dem SDK 21:
War ich in der Lage, dieses problem zu lösen, indem Sie eine neue Klasse namens
AndroidHttpClient
in einem neuen Paketandroid.net.http
. Danach musste ich kommentieren mein Unit-Test-Klasse mit@Config(constants = BuildConfig.class, sdks = 21)
was laufen die tests gegen eine emulierte version von API-21, die ist die Letzte version von Android Robolectric unterstützt derzeit.Gibt es derzeit ein Thema eröffnet hier, so, wenn Sie release version 3.1 sollte alles in Ordnung sein und Sie nicht haben, um diese Problemumgehung zu verwenden.
Falls der target-SDK ist 28 dann nach diese, müssen wir folgende Zeile in AndroidManifest.xml