当使用Robolectric执行测试时,我的BroadcastReceiver中的onReceive
从未被调用。
测试
@Test
public void WhenSentNewMessageInAirplaneMode_ToastShouldBeDisplayed() {
// Arrange
ShadowSettings.setAirplaneMode(true);
ImageButton sendBtn = (ImageButton)activity.findViewById(R.id.sendBtn);
EditText messageEditText = (EditText)activity.findViewById(R.id.messageEditText);
EditText recipientsEditText = (EditText)activity.findViewById(R.id.recipientsEditText);
messageEditText.setText("<a message>");
recipientsEditText.setText("<a address>");
// Act
sendBtn.performClick();
// Assert
assertEquals(Robolectric.application.getString(R.string.message_not_sent), ShadowToast.getTextOfLatestToast()); // --> ShadowToast.getTextOfLatestToast() is always null
}
我的活动
OnCreate
在创建时PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SmsMessageSender.SENT), PendingIntent.FLAG_UPDATE_CURRENT);
覆盖
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(smsSentReceiver);
}
@Override
protected void onResume() {
super.onResume(); // This call always
smsSentReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent arg1) {
if (getResultCode() != Activity.RESULT_OK) {
Toast.makeText(getBaseContext(), getString(R.string.message_not_sent), Toast.LENGTH_LONG).show(); // On test this never call
}
}
};
registerReceiver(smsSentReceiver, new IntentFilter(SmsMessageSender.SENT));
}
点击发送按钮
smsManager.sendMultipartTextMessage(recipient, null, messageParts,
new ArrayList<>(Arrays.asList(sentPI))
, null)
);
Log.v("TAG", "Message not sent")
而不是Toast.makeText()...
并检查 LogCat? - MC EmperorRobolectric
不会发送短信也不会发送任何有关结果的广播。 - Eugen Martynov