Espresso 中的 intending 与 intended 之间有什么区别?
Whats the difference between intending vs intended in Espresso?
自从我学习Espresso已经2周了,我无法掌握intending
和intended
。什么时候使用 intending
和 intended
?提供的示例和在线教程没有帮助,研究网络对我弊大于利。
从语义上来说,供参考,为什么是intend-ing
,另一个是intended
,这就更添迷惑了。这是另一个 Google 命名错误还是我的错?这两种方法真的没有意义。
我误解了它的用法。 。而已。这是我的代码:
@Test
public void shouldLaunchTagListActivity()
{
onView(withId(R.id.edittext_description_minimized))
.perform(click());
onView(withId(R.id.linearlayout_add_note_maximize))
.check(matches(isDisplayed()));
onView(withId(R.id.relativelayout_quick_action_button))
.check(matches(isDisplayed()));
onView(withId(R.id.imagebutton_tag))
.perform(click());
// should I intended or intending here?
// ???
intended(toPackage(HomeScreenActivity.class.getName()));
onView(withId(R.id.coordinatorlayout_tag_list))
.check(matches(isDisplayed()));
}
这个测试总是通过,即使我用错误的目标替换了意图。
我可以通过检查我的目标视图是否存在并被用户看到来检查另一个 activity 是否已启动。但现在我要 运行 处理一个不同的用户故事,我真的需要检查 activity 是否发送了启动另一个 activity 的请求(我的 activity,不是外部的).
非常感谢任何解释!
不同之处在于 Intended
仅验证 Intent 是否已启动(您想要的)。 Intending
将 return Intent 启动时的结果。
对于 Intended
(如果您想检查 Intent 是否确实启动了您的 activity)
intended(hasComponent(TagListActivity.class.getName()));
如果您按下按钮并启动,比方说,MyActivity,并且您测试 intended
TagListActivity,这将失败。它将抛出以下错误:
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents.
现在,如果您正在测试 onActivityResult
是否得到正确处理,您将使用 Intending
并传入类似于此的 ActivityResult
:
Intent resultData = new Intent();
resultData.putExtra("resultData", "fancyData");
ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData);
intending(toPackage(HomeScreenActivity.class.getName())).respondWith(result));
// Perform action that throws the Intent
onView(withId(R.id.imagebutton_tag)).perform(click());
// Verify your Activity is in the state it should be here.
所以在这种情况下,如果您期望 "HomeScreenActivity" 到 return 某些东西,您可以使用 Intending
.
自从我学习Espresso已经2周了,我无法掌握intending
和intended
。什么时候使用 intending
和 intended
?提供的示例和在线教程没有帮助,研究网络对我弊大于利。
从语义上来说,供参考,为什么是intend-ing
,另一个是intended
,这就更添迷惑了。这是另一个 Google 命名错误还是我的错?这两种方法真的没有意义。
我误解了它的用法。
@Test
public void shouldLaunchTagListActivity()
{
onView(withId(R.id.edittext_description_minimized))
.perform(click());
onView(withId(R.id.linearlayout_add_note_maximize))
.check(matches(isDisplayed()));
onView(withId(R.id.relativelayout_quick_action_button))
.check(matches(isDisplayed()));
onView(withId(R.id.imagebutton_tag))
.perform(click());
// should I intended or intending here?
// ???
intended(toPackage(HomeScreenActivity.class.getName()));
onView(withId(R.id.coordinatorlayout_tag_list))
.check(matches(isDisplayed()));
}
这个测试总是通过,即使我用错误的目标替换了意图。
我可以通过检查我的目标视图是否存在并被用户看到来检查另一个 activity 是否已启动。但现在我要 运行 处理一个不同的用户故事,我真的需要检查 activity 是否发送了启动另一个 activity 的请求(我的 activity,不是外部的).
非常感谢任何解释!
不同之处在于 Intended
仅验证 Intent 是否已启动(您想要的)。 Intending
将 return Intent 启动时的结果。
对于 Intended
(如果您想检查 Intent 是否确实启动了您的 activity)
intended(hasComponent(TagListActivity.class.getName()));
如果您按下按钮并启动,比方说,MyActivity,并且您测试 intended
TagListActivity,这将失败。它将抛出以下错误:
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents.
现在,如果您正在测试 onActivityResult
是否得到正确处理,您将使用 Intending
并传入类似于此的 ActivityResult
:
Intent resultData = new Intent();
resultData.putExtra("resultData", "fancyData");
ActivityResult result = new ActivityResult(Activity.RESULT_OK, resultData);
intending(toPackage(HomeScreenActivity.class.getName())).respondWith(result));
// Perform action that throws the Intent
onView(withId(R.id.imagebutton_tag)).perform(click());
// Verify your Activity is in the state it should be here.
所以在这种情况下,如果您期望 "HomeScreenActivity" 到 return 某些东西,您可以使用 Intending
.