2012-06-18 29 views
7

"Kayıt" düğmesine tıklandığında bir amaç yayınlıyorum. Kaydın başlatılıp başlatılmadığını gösteren bir boole değişkeni geçilir. Bir amaç oluşturmak için kod:Bir niyet yayınlandığını sınamak için

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

Bu kodu sınamak için, teste bir alıcı kaydettim. Amaç alındı, ancak geçirilen değişken aynı değil. Kodu ayıklarsa, değerin gönderildiği ile aynı olduğunu görebilirim, ancak aldığımda, aynı değer değil.

@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(); 

} 

Ben de (yerine getBoolean yerine kendi gölgesinin fiili niyet, ancak aynı sonucu get (kullanarak

cevap

3

) karşı test ettik) benim için çalıştı.

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" daki "assert" lerden herhangi biri gerçekten aranıyor mu? Ben hem assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), equalTo (true)), hem de assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), equalTo (false)) denedim; vakalar. Bu yüzden, benim tahminim, bu ifadeli ifadelerin hiçbir zaman gerçekten aranmadığıdır. – iRuth

+0

Hayır, çağrılmadı. – zavidovych

0

Bu orijinal için yardımcı olabilir, ancak olmayabilir, gelecekteki insanlar: Bu durumda kendinizi bulmak için ne - öncelikle bir kasıtsız yayın alıcınızın tarafından alınmazsa böylece sabitleri ve niyet filtreler farklıdır kontrol . Bu sorunu kabul ettiğimden daha uzun süre geçirdiğim birkaç kez!

İlgili konular