2012-06-18 7 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(); 

} 

Я также протестировали против фактического намерения, а не его тени, но тот же результат

ответ

3

с помощью ГЭТ() вместо getBoolean() работал для меня.

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

На самом деле вызываются ли какие-либо из '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Я попробовал оба: assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), equalTo (true)); 'и' assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), equalTo (false)); 'и мои тесты не прерывались в обоих случаев. Итак, я предполагаю, что те утверждения, которые никогда не вызываются, действительно вызываются. – iRuth

+0

Нет, он не вызван. – zavidovych

0

Это не может помочь в оригинале, но, будущие люди: если вам посчастливилось найти себя в этой ситуации, - во-первых, проверить постоянные и умысел фильтры различны, так что непреднамеренное трансляция не принимается вашим приемником , Несколько раз я потратил дольше, чем я согласен с этим вопросом!