Android Espresso IdlingPolicies.setIdlingResourceTimeout无效

eri*_*icn 5 java android android-espresso

我有几个类来测试深层链接.每个班级测试1个深层链接.

当我单独运行时,很少有测试总是在10秒以上正确终止,但是当我一起运行它们时总是花费超过45秒完成.

在此输入图像描述
请注意,所有这些测试现在都应该失败(我还没有完成它们的实现)所以结果不应该变化.

我用IdlingPolicies.setIdlingResourceTimeout错了吗?

我的考试班:

@RunWith(AndroidJUnit4.class)
public class DeepLinkActivityBagTest extends MyActivityTest {

    @Rule
    public MyActivityTestRule<DeepLinkActivity> activityTestRule =
            new MyActivityTestRule<DeepLinkActivity>(DeepLinkActivity.class) {
                @Override
                protected Intent getActivityIntent() {
                    Intent intent = super.getActivityIntent();
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("xxx://bag"));
                    return intent;
                }
            };

    @Test
    public void testCorrectScreenOpened() {
        setUpWait();

        String expectedToolbarTitle = "shopping bag" + mToolbarTitleSuffix;
        onView(withTextIgnoreCase(expectedToolbarTitle)).check(matches(isDisplayed()));
    }
}
Run Code Online (Sandbox Code Playgroud)

它的父类:

@RunWith(AndroidJUnit4.class)
public class MyActivityTest {
    @Rule
    public MyActivityTestRule<DeepLinkActivity> activityTestRule;
    protected String mToolbarTitleSuffix;

    @Before
    public void prepare() {
        if (!BuildConfig.FLAVOR.equals(ENV_PRODUCTION)) {
            mToolbarTitleSuffix = String.format(" (%s)", BuildConfig.FLAVOR);
        }
    }

    @After
    public void resetCountry() {
        if (activityTestRule != null) {
            PrefUtils.clear(InstrumentationRegistry.getTargetContext());
            PrefUtils.setCurrentCountryCode(activityTestRule.getmCurCountryCode());
            PrefUtils.setCurrentLangCode(activityTestRule.getmCurLangCode());
        }
    }

    protected void setUpWait() {
        try {
            Thread.sleep(3 * 1000);
        } catch (InterruptedException e) {
            Logger.e(e, "");
        }
        IdlingPolicies.setMasterPolicyTimeout(10, TimeUnit.SECONDS);
        IdlingPolicies.setIdlingResourceTimeout(5, TimeUnit.SECONDS);
    }
}
Run Code Online (Sandbox Code Playgroud)

MyActivityTestRule:

public class MyActivityTestRule<D extends Activity> extends ActivityTestRule {
    private String mCurCountryCode;
    private String mCurLangCode;

    protected MyActivityTestRule(Class activityClass) {
        super(activityClass);
    }

    public MyActivityTestRule(Class activityClass, boolean initialTouchMode) {
        super(activityClass, initialTouchMode);
    }

    public MyActivityTestRule(Class activityClass, boolean initialTouchMode, boolean launchActivity) {
        super(activityClass, initialTouchMode, launchActivity);
    }

    @Override
    protected void beforeActivityLaunched() {
        super.beforeActivityLaunched();

        PrefUtils.setup(InstrumentationRegistry.getTargetContext());
        mCurCountryCode = PrefUtils.getCurrentCountryCode();
        mCurLangCode = PrefUtils.getCurrentLangCode();
        PrefUtils.clear(InstrumentationRegistry.getTargetContext());
        PrefUtils.setCurrentCountryCode("SG");
        PrefUtils.setCurrentLangCode("en");
    }

    String getmCurCountryCode() {
        return mCurCountryCode;
    }

    String getmCurLangCode() {
        return mCurLangCode;
    }
}
Run Code Online (Sandbox Code Playgroud)