单元测试Android SMS接收器

Kit*_*fer 5 sms junit android unit-testing pdu

我尝试在BroadcastReceiver上编写一个单元测试,当收到短信时会收到通知.它不应该是默认的应用程序.相反,我只需要这个双因素身份验证.对于这种情况,我用[1]创建了一个PDU.

但是当我把它传递给BroadcastReceiver时,发送者的手机nr永远不会被android读取它只是null.正文文本被返回.

@TargetApi(Build.VERSION_CODES.KITKAT)
@Test
public void testOnReceive() throws Exception {
    final byte[] decodedPDU = BaseEncoding.base16().decode(PDU);
    final ReceiveSmsBroadcastReceiver receiveSmsBroadcastReceiver = spy(new ReceiveSmsBroadcastReceiver(true));
    final Intent intent = new Intent();
    intent.putExtra("format",SmsConstants.FORMAT_3GPP);
    intent.putExtra("pdus", new Object[]{decodedPDU});
    intent.setAction("android.provider.Telephony.SMS_RECEIVED");
    intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, 1);
    receiveSmsBroadcastReceiver.onReceive(InstrumentationRegistry.getTargetContext(), intent);
Run Code Online (Sandbox Code Playgroud)

在接收器中,我这样做以获取SMSMessage对象:

@TargetApi(Build.VERSION_CODES.KITKAT)
private void getSMSKitKat(final Context context, final Intent intent) {
    final SmsMessage[] messagesFromIntent = Telephony.Sms.Intents.getMessagesFromIntent(intent);
Run Code Online (Sandbox Code Playgroud)

我在这里收到一个SmsMessage数组,正文消息是正确的.但我需要测试我的支票发件人电话号码才能通知用户界面收到短信:但是这里的nr总是为空:

private boolean isCorrectSender(@Nullable final SmsMessage message) {
    if (message == null) {
        return false;
    }
    final String nr = message.getOriginatingAddress();
Run Code Online (Sandbox Code Playgroud)

有人能指出我这里有什么不对吗?

PS:SMSConstants和PhoneConstants都是我从AOSP获取的框架类,因为这些API是非公开的

[1] http://twit88.com/home/utility/sms-pdu-encode-decode