ANDROID, EXEMPLE ET TEST

Documents pareils
Environnements de développement (intégrés)

TP au menu «UI ANDROID»

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Programmer en JAVA. par Tama

TP SIN Programmation sur androïde Support : eclipse

Auto-évaluation Programmation en Java

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Android 4 Les fondamentaux du développement d'applications Java

as Architecture des Systèmes d Information

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Tutorial pour une application simple

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Warren PAULUS. Android SDK et Android x86

Package Java.util Classe générique

Introduction à Eclipse

Once the installation is complete, you can delete the temporary Zip files..

Créer des applications Android

Un ordonnanceur stupide

Threads. Threads. USTL routier 1

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

1.3 Gestion d'une application

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation Par Objets

TP2 : Client d une BDD SqlServer

Projet Android (LI260) Cours 2

Android UIThread, Thread, Handler et AsyncTask

Les fondamentaux du développement d applications Java

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer

Génie Logiciel avec Ada. 4 février 2013

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

TD/TP PAC - Programmation n 3

LOG4430 : Architecture logicielle et conception avancée

Votre premier projet Android

Cours de Systèmes d Exploitation

Connexions à un projet CVS via Eclipse en accès local et distant. 15 Mai 2007

Java Licence Professionnelle CISII,

Cours 1: Java et les objets

Projet de programmation (IK3) : TP n 1 Correction

Instructions Mozilla Thunderbird Page 1

Bases Java - Eclipse / Netbeans

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Synchro et Threads Java TM

TD/TP 1 Introduction au SDK d Android

Tutoriel d installation de Hibernate avec Eclipse

Plan du cours. Historique du langage Nouveautés de Java 7

Les arbres binaires de recherche

Développement Logiciel

Problèmes liés à la concurrence

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Editing and managing Systems engineering processes at Snecma

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Création d un service web avec NetBeans 5.5 et SJAS 9

Education Delivery Intelligent Tool

TP1 : Initiation à Java et Eclipse

Travaux Pratiques : Lucène - Gestion d un index plein texte

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Android et le Cloud Computing

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Une introduction à la technologie EJB (2/3)

Programmation par les Objets en Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

Déploiement de SAS Foundation

Alfstore workflow framework Spécification technique

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

How to Login to Career Page

TD/TP PAC - Programmation n 3

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Bases de données et fournisseurs de contenu

Génération de code binaire pour application multimedia : une approche au vol

Corrigés des premiers exercices sur les classes

USB 598. Quick Start Guide (Windows) Guide de démarrage rapide (Windows) USB Modem. Modem USB.

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Thank you for choosing the Mobile Broadband USB Stick. With your USB Stick, you can access a wireless network at high speed.

De Java à Android version 0.1

Eclipse atelier Java

calls.paris-neuroscience.fr Tutoriel pour Candidatures en ligne *** Online Applications Tutorial

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

1. Base de données SQLite

Tp 1 correction. Structures de données (IF2)


Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

3615 SELFIE. HOW-TO / GUIDE D'UTILISATION

Atelier Progress Rollbase

Java - la plateforme

INITIATION AU LANGAGE JAVA

INSTALLATION DE WINDOWS 2000 SERVER POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

Spring par la pratique

Quatre axes au service de la performance et des mutations Four lines serve the performance and changes

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

Transcription:

Une application exemple Les tests unitaires ANDROID, EXEMPLE ET TEST L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 1 / 22

RETOUR SUR L EXEMPLE AVEC LES FRAGMENTS L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 2 / 22

RETOUR SUR LES FRAGMENTS Ajouts Retirer Par FragmentTransaction (et commit) L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 3 / 22

DÉPLACER LA VUE D UN FRAGMENT Il s agit de déplacer la vue liée au fragment Il faut donc le retrouver dans son parent, et le changer d indice Boucle for Car il manque : private View[] getchilds(viewgroup v) { View [] res = null; if (v!= null) { res = new View[v.getChildCount()]; for(int i = 0; i < res.length; i++) res[i] = v.getchildat(i); return res; Pour changer l indice, c est la méthode <ViewGroup>.addView( v, i) mais avant il faut l enlever L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 4 / 22

ROTATION ET BUNDLE Caution: Your activity will be destroyed and recreated each time the user rotates the screen. When the screen changes orientation, the system destroys and recreates the foreground activity because the screen configuration has changed and your activity might need to load alternative resources (such as the layout). http://developer.android.com/training/basics/activity-lifecycle/recreating.html Re-créer => refaire des objets Pour les fragments, on s en sort car il y a le paramètres (et recréer avec ce même paramètre) Des fonctions peuvent être appelées avant destruction onsaveinstancestate pour une Activité onsaveinstancestate pour un fragment on peut y remplir le bundle Ne pas oublier l appel à super.xxx Méthode pour utiliser ce qui est sauvé oncreate(bundle saved) pour un fragment onrestoreinstancestate(bundle instate) pour une activité A faire évoluer en même temps que le code L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 5 / 22

AUTRE FRAGMENT : DIALOGUE Comme un fragment Un peu particulier (dialog) Méthode show, pas de transaction Besoin de prévoir la communication (interface logicielle), notamment pour la valeur de retour L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 6 / 22

ANDROID ET JAVA Le tri des tâches : Comparable de java Enum de java C.f. cours POO s5 Puis gestion de la rotation (re remplir la liste de fragment, à partir de leur oncreate par un appel à leur activité) L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 7 / 22

TESTS ET ANDROID L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 8 / 22

PRINCIPES Un framework de test intégré dans le sdk JUNIT 3 pour l extension pour android Junit «normal» pour le java «normal» Suites de tests dans des environnements semblables aux applications Intégration dans l IDE Doc : https://developer.android.com/tools/testing/in dex.html L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 9 / 22

d après un cours de Philippe Collet EN JUNIT 3, LES TESTCASES Ecrire des sous-classes de TestCase Un TestCase peut définir un nombre quelconque de méthodes testxxx() Pour vérifier les résultats attendus (écrire des oracles!), il faut appeler une des nombreuses variantes de méthodes assertyyy () fournies asserttrue(string message, boolean test), assertfalse( ) assertequals( ) : test d égalité avec equals assertsame( ), assertnotsame( ) : tests d égalité de référence assertnull( ), assertnotnull( ) Fail( ) : pour lever directement une AssertionFailedError Surcharge sur certaines méthodes pour les différentes types de base 10 L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 10 / 22

d après un cours de Philippe Collet JUNIT 3 : DIAGRAMME DE CLASSES MonTest Une méthode testxxx() par test 11 L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 11 / 22

d après un cours de Philippe Collet JUNIT 3.X JUNIT 4 package junit3; import calc.calculator; import junit.framework.testcase; public class CalculatorTest extends TestCase { private static Calculator calculator = new Calculator(); protected void setup() { calculator.clear(); package junit4; import calc.calculator; import org.junit.before; import org.junit.ignore; import org.junit.test; import static org.junit.assert.*; public class CalculatorTest { private static Calculator calculator = new Calculator(); @Before public void clearcalculator() { calculator.clear(); public void testadd() { calculator.add(1); calculator.add(1); assertequals(calculator.getresult(), 2); @Test public void add() { calculator.add(1); calculator.add(1); assertequals(calculator.getresult(), 2); 12 L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 12 / 22

d après un cours de Philippe Collet JUNIT 3.X JUNIT 4 public void testdividebyzero() { try { calculator.divide(0); fail(); catch (ArithmeticException e) { public void notreadyyettestmultiply() { calculator.add(10); calculator.multiply(10); assertequals(calculator.getresult(), 100); @Test(expected = ArithmeticException.class) public void dividebyzero() { calculator.divide(0); @Ignore("not ready yet") @Test public void multiply() { calculator.add(10); calculator.multiply(10); assertequals(calculator.getresult(), 100); 13 L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 13 / 22

INTÉGRATION DANS ECLIPSE (1/2) Utilisation facile dans eclipse (sinon ligne de commande) File > New > Project Ouvre la boite de dialogue Select a Wizard Choisir dans Android, Android Test Project, Choix du nom (xxxtest) Choix de l emplacement Dans un projet à part entière dans un projet à part entière placé dans un dossier test d un projet; L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 14 / 22

INTÉGRATION DANS ECLIPSE (1/2) Choix du projet testé On peut le changer dans le manifest et dans la configuration du build path Choix du sdk cible Cohérence avec choix du projet Pré-rempli Par convention (optionnel) Renommage du dossier src Renommage du package de test (package de l appli +.test) L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 15 / 22

TESTCASE ANDROID Test d activité ActivityInstrumentationTestCase2 Pour tester les activités dans un contexte habituel possibilité pour de mock objects pour les Intents (communications entre application) ActivityUnitTestCase Isolation (hors contexte) Mock Object pour contexte et d application SingleLaunchActivityTestCase invokes setup() and teardown() only once no mock objects. Et d autres (service, content provider (save & restore date, UI Monkey test) ViewAsserts pour des tests sur la positions des View L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 16 / 22

LE TEST PAR L EXEMPLE, TOUJOURS AVEC LA TODO LIST Un exemple dans le sdk Spinner(Activity)Test ActivityInstrumentationTestCase2 Tests et le UI Thread Certaines actions interdites en dehors du thread graphique Méthode runonuithread, synchronisation getinstrumentation().waitforidlesync(); Attention aux blocages ou à la gestion de la file d attente des événéments L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 17 / 22

EXEMPLE DE TEST D INTERFACE : L AJOUT (NOMBRE) DE FRAGMENT public void testajout() { // focus sur le edittext, normalement par defaut... mais runonui( new Runnable() { public void run() { nouveau.requestfocus(); ); for (int i = 0; i < taches.length; i++) { getinstrumentation().sendstringsync(taches[i]); // ajouter.callonclick(); // provoque android.view.viewrootimpl$calledfromwrongthreadexception: Only the original thread that created a view hierarchy can touch its views. runonui(clickonview(ajouter)); assertequals("nombre de vue sous liste", i+1, liste.getchildcount()) Cache runonuithread et waitforidlesync L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 18 / 22

EXEMPLE : LE DEPLACEMENT public void testchangement() { testajout(); // on recupere les Items View [] items = getchilds(liste); int nb_items = items.length; // on memorise le premier apres les ajouts... qui sera deplace en dernier en n-1 etapes View first = items[0]; ImageButton down = (ImageButton) first.findviewwithtag("down"); for(int i = 0; i < nb_items-1; i++) { assertequals("nombre de vue sous liste", taches.length, items.length); // on deplace le 1er au dernier runonui(clickonview(down)); // on recupere a nouveau les Item items = getchilds(liste); assertequals("l'item est en "+(i+1), items[i+1], first); L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 19 / 22

GESTION DE LA VIE DES ACTIVITÉS : ET LA ROTATION? Rotation => création à nouveau Donc nouvelle activité, nouveaux objets Les objets initiaux (setup) sont périmés Pour récupérer la nouvelle instance il faut passer par Robotium (plus simple) https://code.google.com/p/robotium/ S ajoute au projet L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 20 / 22

POUR LA ROTATION Changement d orientation avec Robotium if (orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) msolo.setactivityorientation(solo.landscape); else msolo.setactivityorientation(solo.portrait); Synchro sur la création de l activité et qu elle ne fasse plus rien msolo.waitforactivity(todolist.class); getinstrumentation().waitforidlesync(); On peut récupérer les nouveaux objets... todo = (TodoList) msolo.getcurrentactivity(); //this will return new activity liste = (LinearLayout) todo.findviewbyid(id.liste); L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 21 / 22

EXEMPLES DE PIEGE Gestion des threads Rotation Utilisation d objet ou propriété non initialisés Par exemple un tag L3I Projet de Licence - Semestre 6 Android, Exemple et test Philippe Renevier Gonin 22 / 22