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

时间:2016-09-27 14:16:52

标签: android android-espresso

自从我学习Espresso以来已经有两周了,我无法掌握intendingintended。我何时使用intendingintended?提供的示例和在线教程没有帮助,研究网络对我造成的伤害大于好处。

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

我误解了它的用法。 I wanted to test if my activity A launched activity 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()));
}

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

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

非常感谢任何解释!

1 个答案:

答案 0 :(得分:17)

区别是Intended仅验证是否启动了Intent(您想要的是什么)。 <{1}}将在启动Intent时返回结果。

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

Intended

如果您按下按钮并启动,例如,MyActivity,并且您为TagListActivity测试intended(hasComponent(TagListActivity.class.getName())); ,则会失败。它会抛出以下错误:

intended

现在,如果您正在测试android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents. 处理得当,您可以使用onActivityResult并传入类似于此的Intending

ActivityResult

因此,在这种情况下,如果您希望“HomeScreenActivity”返回某些内容,则可以使用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.