什么意思与Espresso之间的意图有什么区别?

Neo*_*rge 7 android android-espresso

它过2次周以来我学习咖啡,我无法把握intendingintended.什么时候使用intendingintended?提供的示例和在线教程没有帮助,研究网络对我造成的伤害大于好处.

在语义上,为了智力参考,为什么它intend-ing和另一个intended,这更加增加了混乱.这是另一个谷歌命名错误还是仅仅是我?这两种方法真的没有意义.

我误解了它的用法.我想测试我的活动是否A启动了活动B.而已.这是我的代码:

@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()));
}
Run Code Online (Sandbox Code Playgroud)

即使我用错误的目标取代意图,这个测试总是通过.

我可以通过检查我的目标视图是否存在并且是否被用户看到来检查是否已启动其他活动.但现在我将运行一个不同的用户故事,我真的需要检查活动是否发送了请求以启动另一个活动(我的活动,而不是外部).

非常感谢任何解释!

Dee*_*eeV 20

区别Intended仅在于验证了Intent的启动(您想要的是什么). Intending将在启动Intent时返回结果.

对于Intended(如果您想检查意图是否确实启动了您的活动)

intended(hasComponent(TagListActivity.class.getName()));
Run Code Online (Sandbox Code Playgroud)

如果您按下按钮并启动,例如MyActivity,并且您测试TagListActivity,intended则会失败.它会抛出以下错误:

android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents.
Run Code Online (Sandbox Code Playgroud)

现在,如果您正在测试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.
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,如果你期望"HomeScreenActivity"返回一些东西,你会使用Intending.

  • 你应该是撰写官方文档的人 (4认同)
  • @NeonWarge:为了回答语义问题,我认为这是因为`Intending`实际上没有验证,你在*之前设置了*,因此会返回结果.在*意图被抛出之后*在"预期"被验证*的地方. (3认同)