如何在Android中测试基于浓缩咖啡的意图?
我想测试我从活动A发送到活动B的意图。这里有一些示例,还有 不幸的是,我没能把它投入工作。我想在我的第一个活动中测试以下方法如何在Android中测试基于浓缩咖啡的意图?,android,android-intent,android-espresso,Android,Android Intent,Android Espresso,我想测试我从活动A发送到活动B的意图。这里有一些示例,还有 不幸的是,我没能把它投入工作。我想在我的第一个活动中测试以下方法 private void searchForDropOff() { this.startActivityForResult(PoiActivity.newIntent(this, PlacesAPIRequest.PARAM_SEARCH_TYPE_DESTINATION, this.mBooking
private void searchForDropOff()
{
this.startActivityForResult(PoiActivity.newIntent(this, PlacesAPIRequest.PARAM_SEARCH_TYPE_DESTINATION,
this.mBooking.getPickUp() != null ? this.getPickUp().getSafeLatLng() : this.mReferenceLatLng),
PlacesAPIRequest.PARAM_SEARCH_TYPE_DESTINATION);
}
根据我的参考资料,这是我的测试代码:
@RunWith(AndroidJUnit4.class)
public class FirstActivityTest
{
@Rule
public final IntentsTestRule<FirstActivityTest> mRule = new IntentsTestRule<>(FirstActivityTest.class);
@Before
public void stubAllExternalIntents()
{
// By default Espresso Intents does not stub any Intents. Stubbing needs to be setup before
// every test run. In this case all external Intents will be blocked.
intending(not(isInternal())).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null));
}
@Test
public void click_drop_off_box()
{
// Click drop-off box, POI activity displays
onView(withId(R.id.booking_drop_off_layout)).perform(click());
// Verify that an intent to the dialer was sent with the package.
// Think of Intents intended API as the equivalent to Mockito's verify.
intended(allOf(
hasExtra(PoiActivity.EXTRA_SEARCH_TYPE, PlacesAPIRequest.PARAM_SEARCH_TYPE_DESTINATION),
toPackage("com.XXX.passenger.poi.PoiActivity")));
}
}
@RunWith(AndroidJUnit4.class)
公共类首次活动测试
{
@统治
public final IntentsTestRule mRule=新的IntentsTestRule(FirstActivityTest.class);
@以前
公共无效存根外部元素()
{
//默认情况下,浓缩咖啡意向书不会存根任何意向书。存根前需要设置
//每次测试运行。在这种情况下,所有外部意图都将被阻止。
意图(不是(isInternal()).respondWith(新的Instrumentation.ActivityResult(Activity.RESULT_OK,null));
}
@试验
公共作废单击下拉框()
{
//单击下拉框,将显示POI活动
打开视图(带id(R.id.booking\u drop\u off\u layout))。执行(单击());
//验证是否已随软件包发送拨号程序的意向。
//可以将意向API看作与Mockito的verify等效的API。
预期(全部)(
hasExtra(poActivity.EXTRA搜索类型,PlacesAPIRequest.PARAM搜索类型目的地),
toPackage(“com.XXX.passenger.poi.poi活动”);
}
}
我在日志中得到的信息:
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: Wanted to match 1 intents. Actually matched 0 intents.
IntentMatcher: (has extras: has bundle with: key: is "addressType" value: is <2> and resolvesTo: com.xxx.passenger.poi.PoiActivity)
Matched intents:[]
Recorded intents:
-Intent { cmp=com.xxx.passenger/com.xxx.passenger.poi.PoiActivity (has extras) } handling packages:[[com.xxx.passenger]], extras:[Bundle[{referencePoint=lat/lng: (1.3650683,103.8313499), addressType=2}]])
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError:想要匹配1个意图。实际上匹配了0个意图。
IntentMatcher:(has extras:has bundle with:key:is“addressType”值:is并解析为:com.xxx.passenger.poi.poi活动)
匹配意图:[]
记录的意图:
-意向{cmp=com.xxx.passenger/com.xxx.passenger.poi.poi活动(有额外服务)}处理包裹:[[com.xxx.passenger]],额外服务:[捆绑[{referencePoint=lat/lng:(1.3650683103.8313499),地址类型=2}]]
天哪,两天后我终于找到了解决办法。
我使用了hasComponent
而不是toPackage
,我的测试通过了。
我不确定我的结论是否正确,但对于检查应用程序的活动(组件),我们应该使用hasComponent
方法
所以我的变化是:
intended(allOf(
hasExtra(PoiActivity.EXTRA_SEARCH_TYPE, PlacesAPIRequest.PARAM_SEARCH_TYPE_DESTINATION),
hasComponent("com.XXX.passenger.poi.PoiActivity")));
是的,package
(又称applicationId
)是一组组件(即清单中声明的内容)。