Aller au contenu

[Problème] Test unitaire : AlertDialog


Recommended Posts

Bonjour à vous!

Je suis en train de faire les tests unitaires de mon application, je tâtonne au fur et à mesure.

Je voudrais tester la suppression d'un utilisateur

J'arrive à tester ma liste, choisir un des éléments, sélectionner la suppression et donc lancer l'AlertDialog, et j'aurais aimé savoir comment faire pour paramétrer la réaction à un choix.

Le code de l'Activity à tester ou est défini l'alerte :

case R.id.supprimer:
           v.setBackgroundColor(getContext().getResources().getColor(R.color.rouge));

           // ** Creation of the AlertDialog to confirm the suppression
           new AlertDialog.Builder(getContext())
               .setTitle("Confirmation")
               .setMessage(getContext().getString(R.string.remove_confirm))
               // ** value of the positive button
               .setPositiveButton(getContext().getString(R.string.oui), new DialogInterface.OnClickListener()
               {
                    public void onClick(DialogInterface dialog, int whichButton)
                    {    
                       //Log.v("onClick", "TODO@Delete: " + (CheckedRecipient)((View)v.getParent()).getTag());
                       deleteRecipient((CheckedRecipient)((View)v.getParent()).getTag());
                    }
               })
               // ** negative button
               .setNegativeButton(getContext().getString(R.string.non), new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int whichButton) {

                       // ** nothing is done                    
                   }
               })
               .show(); 

           break;

Le code de la classe de test ou je veux valider ou annuler l'alerte sachant que j'utilise ActivityInstrumentationTestCase2 (surtout car c'était celui utilisé dans le tuto de google)

public void testDelete() {
       Log.w("testDelete", "Debut");

       mActivity.runOnUiThread(
         new Runnable() {
           public void run() {

               for(int i=0; i
                   // --- Select second item
                   mListView.setSelection(i);
                   Log.v("testDelete@run", "SelectedItemPosition: "+mListView.getSelectedItemPosition());
                   assertEquals(i, mListView.getSelectedItemPosition());

                   mRecipientRowView = mListView.getAdapter().getView(mListView.getSelectedItemPosition(), null, mListView);
                   Log.d("testDelete@run", "RecipientRowView: "+mRecipientRowView);
               }

               //Delete the last

               TextView mRecipient = (TextView)mRecipientRowView.findViewById(com.almerys.psm.ha.android.activity.R.id.textRecipient);
               ImageView mIcon = (ImageView)mRecipientRowView.findViewById(com.almerys.psm.ha.android.activity.R.id.iconeRec);
               Log.d("testDelete@run", "TextViewRecipient: "+mRecipient);
               Log.d("testDelete@run", "TextViewRecipientText: "+mRecipient.getText());

               Log.d("testDelete@run", "ImageViewIcon: "+mIcon);

               mSuppr = (ImageButton)mRecipientRowView.findViewById(com.almerys.psm.ha.android.activity.R.id.supprimer);
               Log.d("testDelete@run", "ImageButtonSuppr: "+mSuppr);

               // --- Perform click
               boolean isClickPerformed = mSuppr.performClick();
               Log.d("testDelete@run", "performClickOnDelete: "+isClickPerformed);    
               assertTrue(isClickPerformed);

           }
         } 
       ); 

       mInstrumentation.waitForIdleSync();


       try {
           Thread.sleep(1000);
       } catch (InterruptedException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }

       Log.v("testDelete", "Fin");
   }

Merci d'avance à tous ceux qui pourront m'aider

Edit Jorodan : Utilise la balise code de préférence ;)

Lien vers le commentaire
Partager sur d’autres sites

Double post mais pour la bonne cause.

J'ai trouvé comment faire finalement.

Dans le code de mon application j'ai du ajouter un get sur mon dialogue pour pouvoir le récupérer dans mon appli de test, c'est pas très propre mais bon...

Et du coup dans le test, je récupère ensuite les boutons oui/non et je simule le click.

Donc si certains son intéressés :

   AlertDialog alertD = recipientAdapter.getAlertD();    // récupérer l'alertDialog à partir de l'adapter        

   Button val, can;
   val=alertD.getButton(DialogInterface.BUTTON_POSITIVE); // récupérer le bouton oui
   can=alertD.getButton(DialogInterface.BUTTON_NEGATIVE); // le bouton non
   val.requestFocus(); // mettre le focus sur le oui
   val.performClick(); // simuler le oui

Tadam ça marche!

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...