isIdleNow() 正在返回 true,但从未发送过指示资源已从繁忙状态转换为空闲状态的消息

isIdleNow() is returning true, but a message indicating that the resource has transitioned from busy to idle was never sent

我正尝试在 Espresso 中为我的 Android 应用程序编写测试,但我遇到了 Idle 问题。如果我的 isIdleNow() 看起来像这样

public boolean isIdleNow() {
    return true;
}

然后消息发送。但是,如果 IsIdleNow() 必须等待某些条件(它在开始时 return 不成立),则不会发送消息。

我的代码:

public class ImageViewIdlingResource implements IdlingResource {

private ImageView imageView=null;
ResourceCallback callback;
public ImageViewIdlingResource(ImageView imageView2){
    this.imageView = imageView2;
}

@Override
public String getName() {
    return "ImageViewIdlingResource";
}

@Override
public boolean isIdleNow() {
    return !imageView.isShown();
}

@Override
public void registerIdleTransitionCallback(ResourceCallback resourceCallback) {
    this.callback = resourceCallback;
}}

和测试:

public class EspressoTest extends ActivityInstrumentationTestCase2<SplashScreen> {

public EspressoTest() {
    super(SplashScreen.class);
}


@Override
public void setUp() throws Exception {
    super.setUp();
    getActivity();
    ImageViewIdlingResource imageResource = new ImageViewIdlingResource((ImageView)getActivity().findViewById(R.id.splashscreen_icon));
    Espresso.registerIdlingResources(imageResource);
}

public void testListGoesOverTheFold() throws InterruptedException {
    onView(withId(R.id.button)).check(matches(isDisplayed()));
}}

你必须通知回调你正在进入空闲状态,类似这样:

@Override
public boolean isIdleNow() {   
    if (!imageView.isShown()){ 
        if (callback != null) {
            callback.onTransitionToIdle();
        }
        return true;
    }
    return false;
}