2012-06-18 30 views
7

Tôi đang phát sóng ý định khi nhấp vào nút "bản ghi". một biến boolean được truyền, cho biết bản ghi có được bắt đầu hay không. Mã để tạo mục đích là:Cách kiểm tra mục đích đã được phát sóng

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

Để kiểm tra mã này tôi đã đăng ký người nhận thử nghiệm. Ý định được nhận nhưng biến đã qua không giống nhau. Nếu tôi gỡ lỗi mã, tôi có thể thấy rằng giá trị là giống như nó được gửi, nhưng khi tôi nhận được nó, nó không phải là cùng một giá trị.

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

} 

Tôi cũng đã thử nghiệm chống lại mục đích thực tế thay vì cái bóng của nó, nhưng kết quả tương tự

Trả lời

3

sử dụng get() thay vì getBoolean() làm việc cho tôi.

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

Có bất kỳ 'xác nhận' nào trong 'BroadcastReceiver' thực sự được gọi không? Tôi đã thử cả hai 'assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), bằngTo (true));' và 'assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), equalTo (false));' và các test của tôi không thất bại trong cả hai các trường hợp. Vì vậy, tôi đoán là những tuyên bố khẳng định không bao giờ thực sự được gọi. – iRuth

+0

Không, nó không được gọi. – zavidovych

0

này có thể không giúp cho bản gốc, nhưng, người trong tương lai: nếu bạn tình cờ tìm thấy chính mình trong tình huống này - trước hết là kiểm tra hằng của bạn và bộ lọc ý là riêng biệt để cho một phát sóng vô tình không nhận được bởi máy thu của bạn . Nhiều lần tôi đã dành nhiều thời gian hơn tôi quan tâm để thừa nhận với vấn đề đó!

Các vấn đề liên quan