Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – Espresso如何等待一段时间(1小时)?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的测试用例中,我必须记录1小时,在机器人solo.sleep(600000)完成了我的工作,但在espresso我感到困惑Idlingresource的概念.我必须开始录音并等待一段时间(取决于测试的类型)15分钟,60分钟等

机器人中的等效代码

solo.clickOnView(solo.getView("start_record"));
    solo.sleep(duration * 60 * 1000);
    solo.clickOnView(solo.getView("stop_record"));

我尝试在espresso中使用它

@RunWith(AndroidJUnit4.class)
@smallTest
public class AaEspressoTest {

private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.absd.rec.RecorderActivity";
private static Class<?> launcherActivityClass;
private Solo solo;
private static CoreRecordingTest skyroTestRunner;


private static Class<? extends Activity> activityClass;

static {
    try {
        activityClass = (Class<? extends Activity>) Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSName);
    } catch (ClassnotFoundException E) {
        throw new RuntimeException(E);
    }
}

@Rule
public final ActivityTestRule<?> activityRule
        = new ActivityTestRule<>(activityClass);

privatE intentservicEIDlingresource idlingresource;

@Before
public void registerIntentservicEIDlingresource() {
    instrumentation instrumentation = instrumentationRegistry.getinstrumentation();
    idlingresource = new IntentservicEIDlingresource(instrumentation.getTargetContext());
    Espresso.registerIdlingresources(idlingresourcE);
}

@After
public void unregisterIntentservicEIDlingresource() {
    Espresso.unregisterIdlingresources(idlingresourcE);
}

@Test
public void testHello() throws Exception {

 onView(withId(AaEspressoTest.getId("recorderpage_record"))).perform(click());

    registerIntentservicEIDlingresource();

    onView(withId(AaEspressoTest.getId("recorderpage_stop"))).perform(click());

   }
}

空闲资源

public class IntentservicEIDlingresource implements Idlingresource {
private final Context context;
private resourceCallBACk resourceCallBACk;
public static Boolean status = false;

public intentservicEIDlingresource(Context context) {
    this.context = context;
}

@Override
public String getName() {
    return IntentservicEIDlingresource.class.getName();
}

@Override
public Boolean isIdleNow() {
    return getTimer();
}

@Override
public void registerIdleTransitionCallBACk(resourceCallBACk resourceCallBACk) {
    this.resourceCallBACk = resourceCallBACk;

}

private static Boolean getTimer() {

    new CountDownTimer(5000,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            // Do Nothing
            status = false;
        }

        @Override
        public void onFinish() {             
            status = true;
        }
    };
    return status;
}
}

例外:

android.support.test.espresso.IdlingresourceTimeoutException: Wait for [com.adbs.recorder.IntentservicEIDlingresource] to become idle timed out

解决方法

您需要一个具有isIdleNow()的Idlingresource,只有在特定的时间量过去时才返回true.为了达到这个目的,保存开始时间并与当前时间进行比较:
public class ElapsedTimEIDlingresource implements Idlingresource {
  private final long startTime;
  private final long waiTingTime;
  private resourceCallBACk resourceCallBACk;

  public ElapsedTimEIDlingresource(long waiTingTimE) {
    this.startTime = System.currentTimeMillis();
    this.waiTingTime = waiTingTime;
  }

  @Override
  public String getName() {
    return ElapsedTimEIDlingresource.class.getName() + ":" + waiTingTime;
  }

  @Override
  public Boolean isIdleNow() {
    long elapsed = System.currentTimeMillis() - startTime;
    Boolean idle = (elapsed >= waiTingTimE);
    if (idlE) {
      resourceCallBACk.onTransitionToIdle();
    }
    return idle;
  }

  @Override
  public void registerIdleTransitionCallBACk(
      resourceCallBACk resourceCallBACk) {
    this.resourceCallBACk = resourceCallBACk;
  }
}

在测试中创建并注册此空闲资源:

@Test
public static void waitForOneHour() {
  long waiTingTime = DateUtils.HOUR_IN_MILLIS;

  // Start
  onView(withId(AaEspressoTest.getId("recorderpage_record")))
      .perform(click());

  // Make sure Espresso does not time out
  IdlingPolicies.setMasterPolicyTimeout(
      waiTingTime * 2,TimeUnit.MILLISECONDS);
  IdlingPolicies.setIdlingresourceTimeout(
      waiTingTime * 2,TimeUnit.MILLISECONDS);

  // Now we wait
  Idlingresource idlingresource = new ElapsedTimEIDlingresource(waiTingTimE);
  Espresso.registerIdlingresources(idlingresourcE);

  // Stop
  onView(withId(AaEspressoTest.getId("recorderpage_stop")))
      .perform(click());

  // Clean up
  Espresso.unregisterIdlingresources(idlingresourcE);
}

您需要setMasterPolicyTimeout和setIdlingresourceTimeout调用,以确保Espresso由于超时而不会终止测试.

完整例子:https://github.com/chiuki/espresso-samples/tree/master/idling-resource-elapsed-time

大佬总结

以上是大佬教程为你收集整理的android – Espresso如何等待一段时间(1小时)?全部内容,希望文章能够帮你解决android – Espresso如何等待一段时间(1小时)?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。