2012-06-18 9 views
7

"録音"ボタンをクリックしたときにインテントをブロードキャストしています。記録が開始されたかどうかを示すブール変数が渡されます。インテントを生成するコードは次のとおりです。インテントがブロードキャストされたことをテストする方法

Intent recordIntent = new Intent(ACTION_RECORDING_STATUS_CHANGED); 
recordIntent.putExtra(RECORDING_STARTED, getIsRecordingStarted()); 
sendBroadcast(recordIntent); 

このコードをテストするには、テストでレシーバを登録しました。インテントは受信されましたが、渡される変数は同じではありません。コードをデバッグすると、値は送信された値と同じであることがわかりますが、取得すると同じ値ではありません。

@Test 
public void pressingRecordButtonOnceGenerateStartRecordingIntent() 
     throws Exception { 
    // Assign 
    AppActivity activity = new AppActivity(); 
    activity.onCreate(null); 
    activity.onResume(); 

    activity.registerReceiver(new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      // Assert 
      ShadowIntent shadowIntent = Robolectric.shadowOf(intent); 
      assertThat(shadowIntent 
        .hasExtra(AppActivity.RECORDING_STARTED), 
        equalTo(true)); 
      Boolean expected = true; 
      Boolean actual = shadowIntent.getExtras().getBoolean(
        AppActivity.RECORDING_STARTED, false); 
      assertThat(actual, equalTo(expected)); 

     } 
    }, new IntentFilter(
      AppActivity.ACTION_RECORDING_STATUS_CHANGED)); 

    ImageButton recordButton = (ImageButton) activity 
      .findViewById(R.id.recordBtn); 

    // Act 
    recordButton.performClick(); 
    ShadowHandler.idleMainLooper(); 

} 

私も)(代わりにgetBooleanのGETを使用して代わりにその影の実際の意図が、同じ結果

答えて

3

()に対してテスト私のために働いてきました。

public void pressingRecordButtonOnceGenerateStartRecordingIntent() 
     throws Exception { 
    // Assign 
    BreathAnalyzerAppActivity activity = new AppActivity(); 
    activity.onCreate(null); 
    activity.onResume(); 

    activity.registerReceiver(new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      // Assert 
      assertThat(intent 
        .hasExtra(AppActivity.RECORDING_STARTED), 
        equalTo(true)); 
      Boolean expected = true; 
      Boolean actual = (Boolean)intent.getExtras().get(
        AppActivity.RECORDING_STARTED); 
      assertThat(actual, equalTo(expected)); 


     } 
    }, new IntentFilter(
      AppActivity.ACTION_RECORDING_STATUS_CHANGED)); 

    ImageButton recordButton = (ImageButton) activity 
      .findViewById(R.id.recordBtn); 

    // Act 
    recordButton.performClick(); 
    ShadowHandler.idleMainLooper(); 

} 
+2

'BroadcastReceiver'の' assert'のどれかが実際に呼び出されますか?私はassertThat(intent.hasExtra(AppActivity.RECORDING_STARTED)、equalTo(true))と 'assertThat(intent.hasExtra(AppActivity.RECORDING_STARTED)、equalTo(false)); 'の両方を試してみました。ケース。だから、私の推測では、それらのassert文は実際に呼ばれることはありません。 – iRuth

+0

いいえ、呼び出されません。 – zavidovych

0

これは、オリジナルのために役立ちますが、ないかもしれません、未来の人:あなたはこのような状況に自分自身を見つけることが起こる場合 - まず意図しない放送があなたの受信機で受信されないように、あなたの定数とインテントフィルタが異なっているチェック。私はこの問題を認めようと思っているよりも長い間、何度か過ごしました!

関連する問題