Android Studio无法识别Espresso类

时间:2014-03-07 09:27:24

标签: gradle android-studio android-espresso

我正在使用Android Studio 0.5.0运行Gradle 1.11。我正在尝试从com.jakewharton.espresso:espresso:1.1-r2安装Espresso库。由于某些原因,AS在项目同步后无法识别Espresso类。因此,每次我尝试在import static com.google.android.apps.common.testing.ui.espresso.Espresso.onView;文件夹文件中导入androidTest时,都会将其标记为无效。

这是我的build.gradle:

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.2'

    defaultConfig {
        minSdkVersion 14

        targetSdkVersion 19
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.squareup.dagger:dagger-compiler:1.2.1'
    compile 'com.squareup.dagger:dagger:1.2.1'

    androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
        exclude group: 'com.squareup.dagger'
    }
}

外部图书馆:

external libraries

8 个答案:

答案 0 :(得分:28)

所以这基本上是Android Studio的一个错误(我在猜测)。

参考:

  1. Issue raised in adt-dev groups
  2. Actual bug - #66841
  3. 解决方法(直到错误修复):

    在您的gradle文件中添加重复提供的依赖项,如下所示:

    dependencies {
        // ...
    
        provided 'com.jakewharton.espresso:espresso:1.1-r2'
        androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
            exclude group: 'com.squareup.dagger'
        }
    }
    

答案 1 :(得分:13)

这个问题让我抓狂。似乎它是Android Studio中的一个已知错误。就我而言,在我将父类应用程序的Build Type从Release更改为Debug之后,它就解决了。希望这可能对某人有帮助

答案 2 :(得分:11)

Espresso 2.0

最近发布了 Espresso 2.0 ,使其成为 Android支持库的一部分。这是announced on the android dev blog

设置指南

他们也linked an updated setup guide。在那里,您可以找到从头开始配置或更新现有espresso配置2.0的说明。

其他提示

更改是以上2个链接包含您需要的所有信息。如果不是,我列出了

下面的一些常见错误

将Android Studio升级到1.0。*

首先升级你的android Studio版本。您应该能够从稳定构建通道(=默认值)获得至少1.0。所以只需使用菜单选项 Android Studio > 检查更新......

要获取最新信息,您还可以进入偏好设置,搜索更新并将频道更改为金丝雀频道

将Android支持库更新为v 11 +

Espresso已包含在版本11的支持库中,因此您必须至少获得该版本。使用 Android SDK管理器检查更新。支持库位于底部的 Extras 树中。

新的依赖项和命名空间

如果从较旧的espresso版本升级,则必须更新依赖项和命名空间。对于新项目,只需将其添加到dependencies文件中的build.gradle

dependencies {
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
}

由于命名空间已更改,因此您必须更新所有导入:

android.support.test.espresso

请注意,使用静态导入更容易。 一些常用的导入作为示例:

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;

对于断言使用hamcrest,再次使用一些示例:

import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.anyOf;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.startsWith;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.equalToIgnoringCase;
import static org.hamcrest.Matchers.equalToIgnoringWhiteSpace;

仪表运行器

需要在defaultConfig中的build.gradle文件和用于从Android Studio启动测试的运行配置中配置测试运行器。

defaultConfig {
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

在您的运行配置中,将其用作检测运行器(仅限完整的类名):

android.support.test.runner.AndroidJUnitRunner

示例测试用例

一个完成的示例测试用例。请注意,MainActivity是您想要测试的行为。测试本身是以测试开始的公共方法,如下例中的testListGoesOverTheFold

@LargeTest
public class HelloWorldEspressoTest extends ActivityInstrumentationTestCase2<MainActivity> {

    public HelloWorldEspressoTest() {
            super(MainActivity.class);
        }

    @Override
    public void setUp() throws Exception {
        super.setUp();
        getActivity();
    }

    public void testListGoesOverTheFold() {
        onView(withText("Hello world")).check(isDisplayed());
    }
}

有关编写测试的详细信息,请访问the espresso start guide

答案 3 :(得分:4)

六个月后,这仍然是一个问题,原始响应者引用的错误已重新打开:https://code.google.com/p/android/issues/detail?id=66841并给予更高的优先级。我还没有能够让Android Studio识别Espresso类,并且使用“提供的”依赖项范围对我来说无法解决问题。 (使用AS 0.8.6和Gradle 0.12.2)

答案 4 :(得分:3)

根据http://tools.android.com/tech-docs/new-build-system/user-guide 只测试了一种构建类型,默认情况下是调试构建类型。

因此,请检查您是否正在使用调试版本变体并重建应用程序。在其他构建类型上,所有的androidTest依赖项都不可见。

如果您需要测试当前的构建类型,可以执行以下操作:

android {     ...     testBuildType&#34; staging&#34; }

答案 5 :(得分:3)

Android Studio 1.5.1在我的案例中没有实现onView()onData()方法。我刚刚对Espresso类及其所有方法进行了静态导入。

我添加了以下内容,一切都运行良好。

import static android.support.test.espresso.Espresso.*;

答案 6 :(得分:1)

您没有具体说明您看到错误的源文件,但根据我的测试,我认为您正在尝试从一个主要的应用程序类访问Espresso类(在 src中) /主/ JAVA / 的)。如果是这样,那就行不通了,因为你已经通过androidTestCompile依赖包含了Espresso,这使得它只能被你的测试类访问,测试类必须在 src / androidTest / java

答案 7 :(得分:0)

我已经尝试了上面提到的所有解决方案,并且仍然没有找到类错误。

我想出了我的解决方案,它节省了我的一天。 因此,如果您打开左侧的项目选项卡到Studio中的项目文件夹并检查构建变体,您可以看到,您的项目设置为单元测试< / strong>即可。您必须将其重新设置为Android Instrumentation Tests并确保您的test.java文件不足  ** SRC \ androidTest \ java中**