无法解决方法getIdlingResource() - Android Espresso

8

我正在尝试使用IdlingResources在网络调用完成后测试某些内容。 我在我的主Activity中有一个CountingIdlingResource来跟踪正在运行的作业,但我的测试文件无法识别getIdlingResource:

enter image description here

这里是我的导入语句:

package com.example.android.bakingapp;

import android.support.test.espresso.Espresso;
import android.support.test.espresso.contrib.RecyclerViewActions;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;

import com.example.android.bakingapp.activities.MainActivity;
import com.example.android.bakingapp.activities.RecipeActivity;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.intent.Intents.intended;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent;
import static android.support.test.espresso.matcher.ViewMatchers.withId;

我在Gradle依赖项中也包含了这个:

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'

1
MainActivity 是否实际上有一个名为 getIdlingResource() 的方法,用于返回空闲资源? - dominicoder
不,我应该意识到MainActivity需要这样一个方法。但是这会如何与CountingIdlingResource一起工作呢? - Adam Zarn
这完全取决于你的实现方式。但简而言之,在MainActivity中,您将拥有一个计数空闲资源,您可以根据需要在活动中增加和减少它,然后通过您认为已经拥有的公共访问器提供它。 - dominicoder
谢谢,我已经添加了访问方法,现在它可以工作了。 - Adam Zarn
3个回答

6

你是否已将以下依赖项添加到gradle中?

androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'

compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'


2
是的,我在我的依赖项中都包含了它们。 - Adam Zarn

5

首先,您需要在MainActivity中创建getIdlingResource()方法:

@Nullable
private SimpleIdlingResource mIdlingResource;

@VisibleForTesting
@NonNull
public IdlingResource getIdlingResource() {
    if (mIdlingResource == null) {
        mIdlingResource = new SimpleIdlingResource();
    }
    return mIdlingResource;
}

然后创建一个空闲资源类:

public class SimpleIdlingResource implements IdlingResource {

    @Nullable private volatile ResourceCallback mCallback;

    private AtomicBoolean mIsIdleNow = new AtomicBoolean(true);

    @Override
    public String getName() {
        return this.getClass().getName();
    }

    @Override
    public boolean isIdleNow() {
        return mIsIdleNow.get();
    }

    @Override
    public void registerIdleTransitionCallback(ResourceCallback callback) {
        mCallback = callback;
    }

    public void setIdleState(boolean isIdleNow) {
        mIsIdleNow.set(isIdleNow);
        if (isIdleNow && mCallback != null) {
            mCallback.onTransitionToIdle();
        }
    }
}

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接