Unit testing a broadcast receiver?

后端 未结 3 562
一向
一向 2021-01-30 05:26

Here\'s a BroadcastReceiver from my project, which I\'m looking to unit test. When the user makes a phone call, it grabs the phone number, and sets up an intent to start a new

3条回答
  •  自闭症患者
    2021-01-30 05:58

    corlettk pointed me at the MockContext object in Android, which does the trick. I've made a subclass of it, TestContext, which looks like this:

    public class TestContext extends MockContext
    {
        private List mReceivedIntents = new ArrayList();
    
        @Override
        public String getPackageName()
        {
            return "com.mypackage.test";
        }
    
        @Override
        public void startActivity(Intent xiIntent)
        {
            mReceivedIntents.add(xiIntent);
        }
    
        public List getReceivedIntents()
        {
            return mReceivedIntents;
        }
    }
    

    And my test case now looks like this:

    public class OutgoingCallReceiverTest extends AndroidTestCase
    {
        private OutgoingCallReceiver mReceiver;
        private TestContext mContext;
    
        @Override
        protected void setUp() throws Exception
        {
            super.setUp();
    
            mReceiver = new OutgoingCallReceiver();
            mContext = new TestContext();
        }
    
        public void testStartActivity()
        {
            Intent intent = new Intent(Intent.ACTION_NEW_OUTGOING_CALL);
            intent.putExtra(Intent.EXTRA_PHONE_NUMBER, "01234567890");
    
            mReceiver.onReceive(mContext, intent);        
            assertEquals(1, mContext.getReceivedIntents().size());
            assertNull(mReceiver.getResultData());
    
            Intent receivedIntent = mContext.getReceivedIntents().get(0);
            assertNull(receivedIntent.getAction());
            assertEquals("01234567890", receivedIntent.getStringExtra("phoneNum"));
            assertTrue((receivedIntent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0);
        }
    }
    

提交回复
热议问题