代码之家  ›  专栏  ›  技术社区  ›  Rainmaker

在浓缩咖啡测试中等待异步操作

  •  0
  • Rainmaker  · 技术社区  · 6 年前

    我有 espresso 测试 Android :

            @Test
            public void ExternalBankAccountDetailsFragment_InfoShown() throws InterruptedException {
    
                // SETUP
                mockRequest();
                clickOnItem();
    mActivityRule.getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    
                Thread.sleep(100);
    
                // CHECKS
        onView(withId(R.id.view)).check(matches(hasDescendant(withText("test"))));
            }
    

    我需要使用 Thread.sleep 等待 async 打电话。但我知道这不是一个好的做法。我很熟悉 IdlingResources 但是我不能使用它,因为我必须更改代码才能使用它(例如 CountingIdlingResource 内部使用 callback 等)。 我怎样才能避免使用 线程。睡眠 ()

    1 回复  |  直到 6 年前
        1
  •  1
  •   Kaskasi    6 年前

    最终,所有的解决方案都会像 Thread.sleep . 问题是: 你怎么能只等待所需的最短时间?

    替代闲置资源的一个方法就是 ConditionWatcher 图书馆: https://github.com/AzimoLabs/ConditionWatcher

    您可以创建一个 Instruction 它检查当前活动是否可以找到视图示例