用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);
Overrides >>
@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)); }
单击发送btn
smsManager.sendMultipartTextMessage(recipient, null, messageParts,
new ArrayList<>(Arrays.asList(sentPI))
, null)
);
当使用Robolectric执行测试时,从不调用我的BroadcastReceiver中的onReceive。测试@Test公共无效WhenSentNewMessageInAirplaneMode_ToastShouldBeDisplayed(){//安排...
我认为这与您注册广播接收器的方式有关。如果您正在收听LocalBroadcast,则可以这样实现它们:
assert(ShadowToast.showedToast("YOUR TOAST MSG"))