首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >咖啡时间懒散者是怎么表现的?

咖啡时间懒散者是怎么表现的?
EN

Stack Overflow用户
提问于 2017-01-28 07:34:08
回答 1查看 307关注 0票数 1

我正在使用博客中提到的上述技术,但是我注意到它不会等待我试图设置的15秒。我在这里的问题是,如果所有后端任务在15秒前完成,espresso是否识别它并开始下一个连续的操作?任何关于这方面的线索都很感激。

代码语言:javascript
复制
    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;
  }
    }

==

long waitingTime = DateUtils.MINUTE_IN_MILLIS / 4;

IdlingPolicies.setMasterPolicyTimeout(
    waitingTime * 2, TimeUnit.MILLISECONDS);
IdlingPolicies.setIdlingResourceTimeout(
    waitingTime * 2, TimeUnit.MILLISECONDS);

IdlingResource idlingResource 
    = new ElapsedTimeIdlingResource(waitingTime);
Espresso.registerIdlingResources(idlingResource);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-28 19:28:36

您需要在registerIdlingResources()之后运行Espresso命令,任何Espresso命令。我已经在我自己的PC上创建了这个例子单元测试,它工作得很好。

代码语言:javascript
复制
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
    @Rule public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class);

    private final long waitingTime = DateUtils.MINUTE_IN_MILLIS / 4;

    @Before public void setUp() {
        IdlingPolicies.setMasterPolicyTimeout(waitingTime * 2, TimeUnit.MILLISECONDS);
        IdlingPolicies.setIdlingResourceTimeout(waitingTime * 2, TimeUnit.MILLISECONDS);
    }

    @Test public void useAppContext() throws Exception {
        IdlingResource idlingResource = new ElapsedTimeIdlingResource(waitingTime);

        Espresso.registerIdlingResources(idlingResource);
        onView(withId(R.id.btnStart)).perform(click());
        Espresso.unregisterIdlingResources(idlingResource);

        assertTrue(true);
    }
}

在我的示例中,我有一个名为btnStart的按钮,可以执行单击,但它可以是与应用程序相关的任何东西。如果这对你有用的话请告诉我。

并在评论中直接回答您的进一步问题:

  1. 在注册空闲资源之后,Espresso不断地对isIdleNow()进行轮询。当idletrue时,这是Espresso继续执行下一个命令的信号。如果要阻塞,则需要isIdleNow()返回false
  2. 在这种特殊情况下,不,空闲资源纯粹基于时间,而不是后台进程的状态,但您可以使空闲资源轮询运行线程/进程的状态。除非您的进程结束时关闭了活动,否则Espresso将等待,但只会阻塞本身的(例如,ViewMatchers、单击等),而不是任何其他线程。这项活动将继续正常运作。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41907432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档