2012-06-18 17 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 के बजाय अपनी छाया के बजाय आशय है, लेकिन एक ही परिणाम

उत्तर

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

क्या 'ब्रॉडकास्ट रिसीवर' में किसी भी 'जोर' को वास्तव में बुलाया जाता है? मैंने दोनों 'assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), बराबर (सत्य)) की कोशिश की; 'और' assertThat (intent.hasExtra (AppActivity.RECORDING_STARTED), बराबर (झूठा)); और मेरे परीक्षण दोनों में विफल नहीं हुए मामलों। तो, मेरा अनुमान है कि उन ज़ोर देने वाले वक्तव्य वास्तव में कभी नहीं बुलाए जाते हैं। – iRuth

+0

नहीं, इसे कॉल नहीं किया जाता है। – zavidovych

0

यह मूल के लिए मदद नहीं सकता है, लेकिन, भविष्य लोग: आप इस स्थिति में अपने आप को खोजने के लिए होगा अगर - सबसे पहले जांच लें कि आपका स्थिरांक और इरादे फिल्टर अलग हैं ताकि को अनैच्छिक प्रसारण अपने रिसीवर द्वारा प्राप्त नहीं किया गया है । कई बार मैंने उस मुद्दे को स्वीकार करने की देखभाल करने से अधिक समय बिताया है!

संबंधित मुद्दे

 संबंधित मुद्दे