【问题标题】:Cannot resolve method getIdlingResource() - Android Espresso无法解析方法 getIdlingResource() - Android Espresso
【发布时间】:2023-04-06 22:56:02
【问题描述】:

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

这是我的导入语句:

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'

【问题讨论】:

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

标签: android android-espresso


【解决方案1】:

您是否将此依赖项添加到 gradle 中?

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

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

【讨论】:

  • 是的,我的依赖项中都包含这两个。
【解决方案2】:

首先,您必须在 MainActivity 中创建 getIdlingResource() 方法:

@Nullable
private SimpleIdlingResource mIdlingResource;

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

然后创建一个 Idle Resource 类:

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();
        }
    }
}

【讨论】:

    【解决方案3】:

    您需要在 Activity 类中添加该方法。这是来自 google 示例的示例项目。

    https://github.com/googlesamples/android-testing/tree/master/ui/espresso/IdlingResourceSample

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      相关资源
      最近更新 更多