Android 使用浓缩咖啡进行测试

Android 使用浓缩咖啡进行测试,android,testing,android-espresso,Android,Testing,Android Espresso,如何使用espresso为以下代码编写测试用例。我有以下代码,当点击图标时执行。 我知道我可以使用预期(toPackage)检查意向的启动(……如果通过startActivityForResult启动,可能会模拟意向的启动结果,但如何处理这种情况 try { intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" +"xxxxxx"); // 12 digit mobile no if (int

如何使用espresso为以下代码编写测试用例。我有以下代码,当点击图标时执行。 我知道我可以使用预期(toPackage)检查意向的启动(……如果通过startActivityForResult启动,可能会模拟意向的启动结果,但如何处理这种情况

try {
 intent = new Intent(Intent.ACTION_DIAL);
 intent.setData(Uri.parse("tel:" +"xxxxxx"); // 12 digit mobile no
    if (intent.resolveActivity(context.getPackageManager()) != null) {
                        startActivity(intent)
      }
    }
catch (Exception e) {
    Toast.makeText(getActivity(), "No phone number available", Toast.LENGTH_SHORT).show();
                }

答案是在测试代码之后使用“预期”方法来验证活动结果是否满足您的要求。如下所示:

@测试
public void typeNumber_ValidInput_initiateCall(){
//在拨号器编辑文本字段中键入电话号码,然后按通话按钮。
onView(带id(R.id.edit_text_caller_number))
.执行(键入文本(有效电话号码),关闭软键盘());
onView(带id(R.id.button\u call\u number)).perform(click());
//验证是否通过正确的操作(电话)向拨号程序发送了意图
//数量和包。将意图预期的API想象为与Mockito的verify等效的API。
预期(全部)(
hasAction(意图、行动和号召),
hasData(意向、数据、电话号码),
toPackage(PACKAGE_ANDROID_DIALER));
}
但是,作为全自动测试的一部分,您还需要对活动的响应进行存根,以便它可以在不需要实际阻止用户输入的情况下运行。您需要在运行测试之前设置意向存根:

@之前
公共无效存根外部元素(){
//默认情况下,浓缩咖啡意向书不会存根任何意向书。存根前需要设置
//每次测试运行。在这种情况下,所有外部意图都将被阻止。
意图(不是(isInternal())。响应为(新ActivityResult(Activity.RESULT_OK,null));
}
然后您可以这样编写测试的相应部分:

@测试
公共无效选择联系人按钮\u单击\u选择联系人编号(){
//存根所有联系人活动以返回有效的电话号码。请注意,活动
//永远不会启动,结果会被存根。
意图(hasComponent(hasShortClassName(“.ContactsActivity”))
.响应(新ActivityResult)(Activity.RESULT_OK,
ContactsActivity.createResultData(有效电话号码));
//单击“拾取联系人”按钮。
打开视图(使用id(R.id.按钮选择联系人))。执行(单击());
//检查该数字是否显示在UI中。
onView(带id(R.id.edit_text_caller_number))
.检查(匹配项(使用文本(有效电话号码));
}
如果您需要使用另一个应用程序(如电话拨号器)的实际用户输入进行验证,这超出了Espresso的范围。由于我目前与一家帮助处理此类案例的供应商合作,我不太愿意说出名称和工具,但许多人确实需要编写模拟真实端到端体验的测试


Mike Evans写了一篇关于测试意图的精彩文章,并且总是有android文档。

我非常感谢你的回答,但我正在寻找一个解决方案,我们使用startActivity而不是startActivityForResult启动拨号器活动。我使用了与你提到的模拟类似的策略摄像机的意图