Espresso 中的 intending 与 intended 之间有什么区别?

Whats the difference between intending vs intended in Espresso?

自从我学习Espresso已经2周了,我无法掌握intendingintended。什么时候使用 intendingintended?提供的示例和在线教程没有帮助,研究网络对我弊大于利。

从语义上来说,供参考,为什么是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.