J'ai une expérience considérable dans la création d'applications Android. Pour mon nouveau projet, nous avons décidé de faire du développement piloté par les tests (TDD). J'ai mis la main sur Robotium pour les tests de scénarios utilisateur, et cela fonctionne bien et semble facile aussi.
Pour les tests unitaires, j'ai essayé de me moquer du contexte en utilisant (MockContext Android Class) mais je suis incapable de le faire. J'ai parcouru ce blog http://sites.google.com)/site/androiddevtesting / et à travers ceci http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-Android.html , ce qui suggère que se moquer de = Android sont encore très limitées et difficiles, et ont suggéré d'utiliser PowerMock, jMockit, JeasyTest ou Roboelectric (en combinaison avec Mockito et Maven) et même RoboGuice.
J'aimerais avoir des suggestions de votre part sur le cadre de test unitaire qui, à votre avis, est le meilleur pour tester Android. (En particulier les tests Android, éventuellement en donnant des contextes simulés et d'autres fonctionnalités moqueuses afin que je puisse rendre mes cas de test aussi indépendants que possible). Toute suggestion ou pointeur serait utile. Merci
Pour les tests hors appareil, regardez Robolectric
Pour les tests sur l'appareil, regardez Borachio
Conclusion: il est encore très, très difficile de bien faire. Les choses s'améliorent (la situation est nettement meilleure aujourd'hui qu'elle ne l'était il y a 6 mois) mais Android est confortablement l'environnement le plus hostile aux tests pour lequel j'ai jamais écrit des programmes.
Pour faire du TDD sous Android, j'utilise personnellement tous les éléments suivants:
Aussi: L'utilisation de bibliothèques d'injection de dépendances telles que Dagger ou Roboguice simplifiera grandement vos tests unitaires/d'intégration. Pour exécuter des tests sur plusieurs appareils, envisagez d'utiliser Spoon .
Un exemple est donné ci-dessous. L'activité montre Hello World lorsque vous cliquez sur un bouton -
public class HelloWorldActivityTest extends
ActivityInstrumentationTestCase2<HelloWorldActivity> {
private HelloWorld activity;
public HelloWorldActivityTest() {
super(HelloWorldActivityTest.class);
}
public void testShouldRenderGreetingOnButtonClick() {
activity = this.getActivity();
Button button = (Button) activity.findViewById(R.id.btn_greet);
TouchUtils.clickView(this, button);
assertEquals("Hello World!",
((TextView) activity.findViewById(Android.R.id.greeting_text))
.getText());
}
}
EDIT: Les choses ont changé depuis que j'ai publié la réponse. Mockito a maintenant un support raisonnablement bon pour Android. Et pour les tests, nous sommes passés d'ActivityInstrumentationTestCase2 à Robolectric, juste pour exploiter la vitesse de la JVM dans la phase de développement. Le Android Testing Framework est idéal pour l'intégration et les tests fonctionnels, mais pas pour les tests unitaires.
Pour appliquer TDD pour Android, Android Testing Codelab vous sera très utile. Le laboratoire de code montre une utilisation de l'outil de test et comment vous pouvez appliquer TDD pour Android.Je l'ai essayé et cela m'a été très utile.
Bonus: Vérifiez Clean Architecture
Android Testing Support Library fournit un cadre complet pour tester Android apps. Cette bibliothèque fournit un ensemble d'API qui vous permettent de créer et d'exécuter rapidement du code de test pour vos applications, y compris JUnit 4 et les tests d'interface utilisateur fonctionnelle (UI). Vous pouvez exécuter des tests créés à l'aide de ces API à partir de Android Studio IDE ou depuis la ligne de commande.
En savoir plus sur:
Je vous remercie :)
on a
https://developer.Android.com/training/testing/start/index.html
et peut en mesure de tester des tests locaux (s'exécute sur JVM) et instrumentaux (s'exécute sur l'appareil ou l'émulateur)
Pour cela, nous devons ajouter
Android Testing Support Library
Le SDK Android SDK comprend deux outils pour tester les applications au niveau fonctionnel
Singe et monkeyrunner