3

我目前正在收听 Google Play 服务广播的操作 SmsRetriever.SMS_RETRIEVED_ACTION 以检查是否检索到 OTP SMS。首先,我启动 SmsRetriever:

SmsRetriever.getClient(context).startSmsUserConsent(null)

我的 BroadcastReceiver 看起来像这样,在实际场景中工作得非常好:

object : BroadcastReceiver() {
  override fun onReceive(
      context: Context,
      intent: Intent
  ) {
    try {
      if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
        val extras = intent.extras
        val smsRetrieverStatus = extras?.get(SmsRetriever.EXTRA_STATUS) as? Status
        when (smsRetrieverStatus?.statusCode) {
          CommonStatusCodes.SUCCESS -> {
            extras.getParcelable<Intent>(SmsRetriever.EXTRA_CONSENT_INTENT)?.let {
              myOtpFragment.startActivityForResult(it, SMS_REQUEST_CODE)
            }
          }
        }
      }
    } catch (e: Exception) {
      Timber.e(e)
    }

}

我想以某种方式模拟这个 onReceive 方法,以测试和验证我的 onActivityResult 代码是否按预期工作,并使用检索到的 OTP 自动填充 EditText。

  override fun onActivityResult(
      requestCode: Int,
      resultCode: Int,
      data: Intent?
  ) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == SMS_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
      val otp = data?.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE) ?: ""
      et_otp?.let {
       it.setText(otp)
       adjustOtpSelection(it)
     }
}

关于如何使用 Espresso 和 Mockito 做到这一点的任何提示?

4

0 回答 0