J'essaie d'écrire des tests unitaires pour mon application Android. Le test particulier avec lequel j'ai des problèmes est juste de m'assurer que lorsque l'utilisateur tape quelque part sur mon MapView, l'application laisse tomber un marqueur où l'utilisateur a tapé. Mais tout ce que j'essaie me laisse avec un message d'erreur. Est-ce que quelqu'un sait comment écrire quelque chose comme ça?Comment déboguer l'activité Android/voir les événements
Voici ce que j'ai essayé jusqu'à présent:
public class MyMapActivityTest extends ActivityInstrumentationTestCase2<MyMapActivity> {
public MyMapActivityTest() {
super("com.example.blah", MyMapActivity.class);
}
public void testPreconditions() {
assertNotNull(getActivity().findViewById(com.example.blah.R.id.mapview));
}
// This method gives me the following error message: java.lang.SecurityException: Injecting to another application requires INJECT_EVENT permission
public void testTap1() {
final MyMapActivity m = getActivity();
final MapView mapView = (MapView) m.findViewById(com.example.blah.R.id.mapview);
getInstrumentation().waitForIdleSync();
getInstrumentation().sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 1, 0, 0));
assertTrue(true); // this doesn't execute
}
// junit.framework.AssertionFailedError: Click can not be completed! Something is in the way e.g. the keyboard
public void testTap2() {
final MyMapActivity m = getActivity();
final MapView mapView = (MapView) m.findViewById(com.example.blah.R.id.mapview);
// Robotium
Solo solo = new Solo(getInstrumentation(), m);
solo.clickOnScreen(1,1);
assertTrue(true); // this doesn't execute
}
// This method gives me the following error message: java.lang.SecurityException: Injecting to another application requires INJECT_EVENT permission
public void testTap3() {
final MyMapActivity m = getActivity();
final MapView mapView = (MapView) m.findViewById(com.example.blah.R.id.mapview);
TouchUtils.tapView(this, mapView);
assertTrue(true); // this doesn't execute
}
}
Dans le fichier AndroidManifest.xml pour MyMapActivityTest, j'ai . Ensuite, la classe à tester,
MyMapActivity
commence par "package com.example.blah". Toutefois, MapView lui-même fait partie du package com.google.android.maps. – jayAussi, je ne sais pas si cela fait une différence, mais je ne cherche pas à tester une sous-classe de "android.app.Application". Mon programme est un couple de classes qui étendent tous "android.app.Activity". Merci. – jay
C'est exactement le problème. Vous n'êtes pas autorisé à instrumenter contre com.google.android.maps car c'est une autre application. C'est pourquoi vous obtenez les exceptions de sécurité. Il n'y a pas moyen de contourner cela. Vous pouvez résigner l'application de cartes avec votre certificat et créer un nouveau projet de test pour cette application, mais vous ne pouvez pas l'utiliser avec votre projet de test existant comme vous l'avez indiqué com.example.blah comme paquet cible. – Renas