Java Android Espresso IdlingPolicys.setIdlingResourceTimeout不工作
我有几个类来测试深层链接。每个类测试1个深度链接 当我单独运行它们时,很少有测试总是在10秒以上正确终止,但当我一起运行它们时,总是需要45秒以上才能完成Java Android Espresso IdlingPolicys.setIdlingResourceTimeout不工作,java,android,android-espresso,Java,Android,Android Espresso,我有几个类来测试深层链接。每个类测试1个深度链接 当我单独运行它们时,很少有测试总是在10秒以上正确终止,但当我一起运行它们时,总是需要45秒以上才能完成 请注意,所有这些测试现在都应该失败(我还没有为它们完成实现),因此结果应该不会变化 我是否使用了IdlingPolicies.setidlingsourcetimeout错误 我的测试班: @RunWith(AndroidJUnit4.class) public class DeepLinkActivityBagTest extends M
请注意,所有这些测试现在都应该失败(我还没有为它们完成实现),因此结果应该不会变化 我是否使用了
IdlingPolicies.setidlingsourcetimeout
错误
我的测试班:
@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()));
}
}
@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);
}
}
@RunWith(AndroidJUnit4.class)
公共类DeepLinkActivityBagTest扩展了MyActivityTest{
@统治
公共MyActivityTestRule activityTestRule=
新的MyActivityTestRule(DeepLinkActivity.class){
@凌驾
受保护的意图getActivityIntent(){
Intent-Intent=super.getActivityIntent();
intent.setAction(intent.ACTION\u视图);
intent.setData(Uri.parse(“xxx://bag"));
返回意图;
}
};
@试验
公开作废testCorrectScreenOpened(){
setUpWait();
字符串expectedToolbarTitle=“购物袋”+mToolbarTitleSuffix;
onView(使用TextIgnoreCase(expectedToolbarTitle))。检查(匹配项(isDisplayed()));
}
}
其父类:
@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()));
}
}
@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);
}
}
@RunWith(AndroidJUnit4.class)
公共类MyActivityTest{
@统治
公共MyActivityTestRule activityTestRule;
受保护字符串mToolbarTitleSuffix;
@以前
公众假期准备(){
如果(!BuildConfig.FLAVOR.equals(ENV_PRODUCTION)){
mToolbarTitleSuffix=String.format((%s)”,BuildConfig.FLAVOR);
}
}
@之后
公共资源(国家){
if(activityTestRule!=null){
clear(InstrumentationRegistry.getTargetContext());
setCurrentCountryCode(activityTestRule.getmCurCountryCode());
setCurrentLangCode(activityTestRule.getmCurLangCode());
}
}
受保护的void setUpWait(){
试一试{
线程。睡眠(3*1000);
}捕捉(中断异常e){
e(e)"",;
}
IdlingPolicys.setMasterPolicyTimeout(10,时间单位为秒);
IdlingPolicys.setIdlingResourceTimeout(5,时间单位秒);
}
}
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;
}
}
公共类MyActivityTestRule扩展ActivityTestRule{
私有字符串mCurCountryCode;
私有字符串mCurLangCode;
受保护的MyActivityTestRule(类activityClass){
超级(活动类);
}
公共MyActivityTestRule(类activityClass,布尔初始接触模式){
超级(activityClass,initialTouchMode);
}
公共MyActivityTestRule(类activityClass、布尔initialTouchMode、布尔启动活动){
超级(activityClass、initialTouchMode、launchActivity);
}
@凌驾
在ActivityLaunched()之前受保护的空{
super.beforeActivityLaunched();
setup(InstrumentationRegistry.getTargetContext());
mCurCountryCode=PrefUtils.getCurrentCountryCode();
mCurLangCode=PrefUtils.getCurrentLangCode();
clear(InstrumentationRegistry.getTargetContext());
PrefUtils.setCurrentCountryCode(“SG”);
序言.设置当前语言代码(“en”);
}
字符串getmCurCountryCode(){
返回mCurCountryCode;
}
字符串getmCurLangCode(){
返回mCurLangCode;
}
}
您知道您的测试不是孤立的吗activityTestRule
fromDeepLinkActivityBagTest
涵盖了MyActivityTest
中的activityTestRule
,这使得@After
方法始终不调用任何内容?另外,45秒是相当长的一段时间,因此请仔细检查您的日志,这肯定会告诉您更多。如果您以错误的方式使用IdlingResource,请检查此项。如果没有失败测试的日志,则回答问题很有挑战性。正如@R.Zagórski所指出的,您可能正在处理与espresso框架没有太大关系的MonitoringInstrumentation
default activity launch timeout.@ericn您找到解决方案了吗?