在Android Espresso测试中模拟/伪造意图

6
我希望在我的应用程序中测试以下流程:
1. 用户点击扫描按钮 2. 点击后启动ZXing应用程序 3. 如果返回正确的QR码,则继续,否则用户可以选择手动输入代码。
我想使用espresso测试这个流程。我认为我必须使用intended或intending 1,但我不确定如何检查意图是否为ZXing以及如何返回到应用程序。
1个回答

3
使用 espresso-intents 的一般流程如下:
  1. 调用 intending(X).respondWith(Y) 来设置模拟。
  2. 执行应该导致发送意图的操作。
  3. 调用 intended(Z) 来验证模拟是否收到了预期的意图。

X 和 Z 可能是相同的,但我倾向于让 X 尽可能泛化(例如只匹配组件名称),并使 Z 更具体(检查额外值等)。

例如,对于 ZXing,我可能会这样做(警告:我没有测试过这段代码!):

Intents.intending(hasAction("com.google.zxing.client.android.SCAN"); // Match any ZXing scan intent
onView(withId(R.id.qr_scan_button).perform(click()); // I expect this to launch the ZXing QR scanner
Intents.intended(Matchers.allOf(
        hasAction("com.google.zxing.client.android.SCAN"),
        hasExtra("SCAN_MODE", "QR_CODE_MODE"))); // Also matchs the specific extras I'm expecting

尚未使用ZXing进行测试,但在我的示例中使用ACTION_SEND有效。 - FireZenk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接