如何在Android中基于Espresso测试意图?

问题描述 投票:1回答:1

[我想测试我从活动A发送到活动B的意图。有一些示例,android-testingespresso.intent.Intents

很遗憾,我无法将其投入工作。我想在我的第一个活动中测试以下方法。

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")));
    }
}

我在日志中得到什么:

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 android-intent android-espresso
1个回答
4
投票

哦,老兄,两天后终于找到了解决方案。我用hasComponent代替了toPackage,并且测试通过了。我不确定我的结论是否正确,但似乎在检查应用程序的活动(组件)时,应使用hasComponent方法。

所以我的更改是:

intended(allOf(
                hasExtra(PoiActivity.EXTRA_SEARCH_TYPE, PlacesAPIRequest.PARAM_SEARCH_TYPE_DESTINATION),
                hasComponent("com.XXX.passenger.poi.PoiActivity")));
© www.soinside.com 2019 - 2024. All rights reserved.