2010-10-20 6 views
1

Je veux tester un appareil glisser une action gauche/droite sur l'écran dans Android, mais je n'ai pas été en mesure de trouver une documentation à ce sujet. Est-ce que quelqu'un peut me donner un coup de main? Peut-il même être fait?Comment puis-je tester les gestes de l'unité dans Android?

+4

« Quelqu'un peut-il prêter une main? » Vous voulez que quelqu'un fasse les balayages pour vous? –

Répondre

2

Généralement, le toucher effectuera une action et vous testerez l'action, pas le toucher lui-même.

+0

Je ne comprends pas. Es-tu en train de dire que je devrais faire l'action et que le test écoute quand il a été fait. – NotACleverMan

+2

Supposons que AndroidOS appelle OnSwipeEvent quand quelqu'un glisse. Dans le talon d'OnSwipeEvent vous appelez MySwipeHandler. Vous devez tester MySwipeHandler. –

+0

Est-ce le seul moyen? J'ai pensé que je serais capable de tester pour voir si les événements de balayage ont réellement fonctionné au lieu de simplement tester les méthodes qu'ils sont censés appeler. Je peux simuler des clics de bouton et autres. Un peu bummer je ne peux pas faire la même chose. Merci quand même. – NotACleverMan

0

J'ai trouvé votre question en essayant d'apprendre à faire exactement la même chose pour le même type de geste. J'ai été capable d'exécuter des tests unitaires assez purs en utilisant l'approche suivante. En d'autres termes test unitaire View.OnTouchListener.onTouch(View v, Event event) fonction.

Voici comment j'ai pu « maquette » du View et Event afin d'exécuter onTouch

import android.os.Looper; 
import android.test.mock.MockContext; 
import android.view.MotionEvent; 
import android.view.ViewStub; 
import junit.framework.TestCase; 

public class SwipeDetectorTest extends TestCase { 
    public void testOnTouch() throws Exception { 
     class MyMockContext extends MockContext { 
      public Looper getMainLooper() { 
       return Looper.getMainLooper(); 
      } 
     } 
     MyMockContext context = new MyMockContext(); 
     View v = new ViewStub(context); 
     int x = 0; int y = 0; 

     // simulated down event 
     MotionEvent event = 
      MotionEvent.obtain(1, 0, MotionEvent.ACTION_DOWN, x, y, 0); 
     SwipeDetector swipeDetector = new SwipeDetector(); 
     assertFalse(swipeDetector.onTouch(v, event)); 

     x = 30; y = 0; 
     event = 
      MotionEvent.obtain(1, 1, MotionEvent.ACTION_MOVE, x, y, 0); 
     boolean action = swipeDetector.onTouch(v, event); 
     assertTrue(action); 

     boolean result = swipeDetector.getSwipeHorizontal() 
      .equals(SwipeDetector.Action.LeftToRight); 
     assertTrue(result); 
    } 
} 
Questions connexes