私のAndroidプロジェクトにはActivityがあります:
public MyActivity extends Activity{
...
@Override
protected void onStart() {
super.onStart();
Intent intent = new Intent(this, MyService.class)
startService(intent);
}
}
onStart()
の で、私はMyActivity
ちょうど開始しMyService
ます。
私の単純なサービスは、電話の状態の変化をリッスンするために使用されます。
public MyService extends Service{
@Override
public int onStartCommand(Intent intent, int arg, int id) {
super.onStartCommand(intent, arg, id);
/*register a PhoneStateListener to TelephonyManager*/
startToListenToPhoneState();// show Toast message for phone state change
return START_STICKY;
}
}
アプリを起動した後、電話をかけると、サービスは電話の状態の変化をリッスンし、トーストメッセージを表示します。
NEXTで、プロジェクトの単体テストを行うことにしたのでAndroidTestCase
、テスト プロジェクトでを作成しました。
public class MySimpleTest extends AndroidTestCase{
...
@Override
protected void runTest() {
//make a phone call
String url = "tel:3333";
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(url));
mContext.startActivity(mIntent);
}
}
上記のテスト ケースは、単に通話を開始するだけで、問題なく動作します。
ホーム ボタンを押してアプリをバックグラウンドに戻し、その後、テスト ケースを実行して通話を開始しますPhoneStateListener
。サービス内の がまだ実行されてトースト メッセージが表示されることを期待していましたが、そうではありませんでした。 .
次に、テストケースでも開始またはバインドする MyService
必要があることがわかりました。その後、テストケースを実行すると、PhoneStateListener からのトーストメッセージを確認できます。なぜですか? つまり、サービスがアプリでバックグラウンドで実行されているのに、実行時に定義された PhoneStateLister をトリガーするために、テスト ケースでサービスを開始またはバインドする必要があるのはなぜですか?MyService
AndroidTestCase