自从我学习Espresso以来已有2周,我无法理解intending
和intended
。什么时候使用intending
和intended
?提供的示例和在线教程无济于事,研究网络对我造成的伤害大于好处。
从语义上讲,为什么要使用intend-ing
和另一个intended
,以供引用,所以更加增加了困惑。这是另一个Google命名错误还是仅我一个人?这两种方法确实没有任何意义。
我误会了它的用法。 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()));
}
即使我用错误的目标取代了意图,该测试也始终会通过。
我可以通过检查我的目标 View 是否存在并被用户看到来检查是否启动了其他 Activity 。但是现在,我将在另一个用户故事上运行,我真的需要检查该 Activity 是否将请求发送到启动另一个 Activity (我的 Activity ,而不是外部 Activity )。
任何解释,不胜感激!
最佳答案
区别在于Intended
仅验证是否启动了Intent(您想要的)。启动Intent时,Intending
将返回结果。
对于Intended
(如果您要检查意图是否确实启动了您的 Activity )
intended(hasComponent(TagListActivity.class.getName()));
如果按下按钮并启动,例如MyActivity,并且测试TagListActivity的
intended
,则此操作将失败。它将引发以下错误: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”返回某些内容,则可以使用
Intending
。关于android - 意式咖啡或意式咖啡有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39727106/