AndroidHttpClient pas trouvé (lors de l'exécution de Robolectric)
J'ai mis en place un projet très simple pour tester l'intégration de Robolectric + Liaison de Données + Retrolambda. Quand je lance le test de costume, je reçois le message suivant:
Error:(30, 30) Gradle: error: cannot access AndroidHttpClient
class file for android.net.http.AndroidHttpClient not found
C'est assez bizarre, car je n'utilise pas AndroidHttpClient n'importe où.
L'erreur se produit ici, sur "l'activité" de la ligne:
@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);
}
Le programme n'utilise jamais AndroidHttpClient. En fait, c'est la totalité du programme:
@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("");
});
}
Des idées sur ce qui est mal?
AndroidHttpClient
a été supprimé à partir du SDK de l'API de Niveau 23, donc si votrecompileSdkVersion
est 23 ou plus, qui pourrait expliquer pourquoi la classe n'est pas trouvé. Pourquoi Robolectric est en train d'essayer d'accéder à cette classe, que je ne peux pas dire.- Qu'il fixe! J'ai été de lancer les tests avec: "@Config(constantes = BuildConfig.class sdk = 21)". Merci!
- Écrire une réponse, donc tout le monde va en bénéficier
Vous devez vous connecter pour publier un commentaire.
AndroidHttpClient
a été supprimé à partir du SDK dans v23 des outils de construction.Comme Robolectric est en cours d'exécution à l'encontre des versions antérieures, il s'attend à être là, ce qui est pourquoi vous voyez cette erreur.
Pour l'instant, vous pouvez l'ajouter dans:
Comme détaillé ici.
Il y a un GitHub billet ouvert pour Robolectric pour résoudre ce problème. Vous pouvez suivre le fil/billet ici.
Mise à jour:
Que certains l'ont souligné à juste titre, une meilleure façon de le faire serait de créer une classe
android.net.http.AndroidHttpClient
dans vos ressources de test. Ce serait une méthode préférée parce que vous êtes seulement en modifiant les sources de test, pas le code de production, afin de faciliter les tests.J'ai juste ajouté faux de classe
android.net.http.AndroidHttpClient
dans mon test de sources. Et il a résolu le problème pour l'instant. D'attente pour Robolectric être mis à jouruseLibrary
résultats dans des articles supplémentaires étant regroupés dans votre application principale tandis que l'ajout de cette classe soussrc/test/java
n'a pas d'incidence sur l'application principale.Apparente problème et la solution:
AndroidHttpClient a été supprimé à partir du SDK de l'API de Niveau 23, tandis que Robolectric a été fixé pour l'exécution des tests avec SDK 21:
J'ai été en mesure de résoudre ce problème par la création d'une nouvelle classe appelée
AndroidHttpClient
dans un nouveau packageandroid.net.http
. Après que j'ai eu à annoter mon Unité de la classe de Test avec@Config(constants = BuildConfig.class, sdks = 21)
qui va exécuter les tests à l'encontre d'une version émulée de l'API 21, qui est la dernière version d'Android Robolectric prend en charge actuellement.Il y a actuellement un problème ouvert ici, donc une fois qu'ils version 3.1 tout devrait bien se passer et vous n'aurez pas à utiliser cette solution de contournement.
Si l'objectif de kit de développement est de 28 puis selon cette, nous devons mettre la ligne suivante dans AndroidManifest.xml