自从我学习浓缩咖啡以来已经有两周时间了,我无法掌握有意和有意的事情.我何时使用有意和有意?提供的示例和在线教程没有帮助,研究网络对我造成的伤害大于好处.
在语义上,为了智力参考,为什么它打算和另一个打算,这更多地增加了混乱.这是另一个谷歌命名错误还是仅仅是我?这两种方法真的没有意义.
我误解了它的用法. 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())); }
即使我用错误的目标取代意图,这个测试总是通过.
我可以通过检查我的目标视图是否存在并且是否被用户看到来检查是否已启动其他活动.但现在我将运行一个不同的用户故事,我真的需要检查活动是否发送了请求以启动另一个活动(我的活动,而不是外部).
非常感谢任何解释!
解决方法
区别在于Intended仅验证Intent是否已启动(您想要什么).当Intent启动时,Intending将返回结果.
对于预期(如果您想检查意图是否确实启动了您的活动)
intended(hasComponent(TagListActivity.class.getName()));
如果您按下按钮并启动,例如MyActivity,并且您针对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”返回某些内容,则可以使用Intending.