/ / Intention résolue à un processus différent lors de l'exécution du test unitaire sous Android - Java, Android, multithreading, tests unitaires, Junit

Intention résolue à un processus différent lors de l'exécution du test unitaire sous Android - Java, Android, multithreading, tests unitaires, Junit

J'ai une petite application qui utilise deux activités. Les activités héritent de MapActivity et affichent une carte (com.google.android.maps).

Depuis la documentation Android Google Map dit

Un seul MapActivity est pris en charge par processus. Plusieurs MapActivities courir simultanément sont susceptibles de interférer dans inattendu et indésirable façons.

J'ai modifié mon manifeste pour exécuter les deux activités dans deux processus différents (j'ai supprimé quelques lignes pour le rendre bref):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.Light">

<uses-library android:name="com.google.android.maps" />

<activity
android:name=".Activity1"
android:process=".Activity1">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>Unit
</activity>

<activity
android:name=".Activity2"
android:process=".Activity2">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

</application>

<uses-sdk android:minSdkVersion="8" />
</manifest>

Maintenant, l'application fonctionne correctement mais j'ai des problèmes lorsque je dois exécuter des tests unitaires sur les deux activités. Par exemple:

package com.example.myapp;
public class Activity1Test extends ActivityInstrumentationTestCase2<Activity1> {

Activity1 mActivity;

public Activity1Test() {
super("com.example.myapp.Activity1", Activity1.class);
}

@Override
protected void setUp() throws Exception {
super.setUp();
setActivityInitialTouchMode(false);
setActivityIntent(new Intent());
mActivity = getActivity();  //An exception is thrown at this line
}
}

Quand j'appelle le getActivity() méthode une exception est levée:

java.lang.RuntimeException: Intent in process com.example.myapp resolved to different process .Activity1: Intent { flg=0x10000000 cmp=com.example.myapp/.Activity1 }
at android.app.Instrumentation.startActivitySync(Instrumentation.java:377)
at android.test.InstrumentationTestCase.launchActivityWithIntent(InstrumentationTestCase.java:119)
at android.test.ActivityInstrumentationTestCase2.getActivity(ActivityInstrumentationTestCase2.java:100)
at com.example.myapp.Activity1Test.setUp(Activity1Test.java:28)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)

Existe-t-il un moyen de faire du test unitaire pour "résoudre" le processus correct?

Réponses:

2 pour la réponse № 1

L'instrumentation exécute tous les composants de votre application dans le même processus.

entrer la description de l'image ici