Android で JUnit Test をしていた時、ちょっと気になる現象を発見してしまいました。
たまたま、android.app.Application を継承した独自実装の Application を使用して、その onCreate() にログを仕込んでいた状態だったので気づいたのです。
以下、その詳細です。
コード
実際のコードをあげるのは大変なので、以下に簡略化したものをあげておきます。
MyApplication.java (Target)
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
}
}
AndroidManifest.xml (Target)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kokufu.android.test.sampletarget"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 省略 -->
</application>
</manifest>
このアプリに対し、以下のようなテストを作成。
(テストとしての役割は全く果たしていませんが…)
MyTest.java (Test)
public class MyTest extends TestCase {
private static final String TAG = "MyTest";
public void testA() {
Log.d(TAG, "testA");
}
public void testB() {
Log.d(TAG, "testB");
}
}
Application.onCreate() が2度呼ばれている
Eclipse から
Run → Run As → Android JUnit Test
と実行してみると、
以下の様な結果が。
onCreate が2度呼ばれています。
間違えて 2度実行してしまったわけではありません。
たった1度、実行操作を行っただけです。
さらによく見てみると、最初の onCreate だけ PID が異なります。
どうも、別プロセスで 2回実行されているようですが、テスト自体は2回目だけ実行されるようです。