24

我正在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'
    }
}

外部库:

外部库

4

9 回答 9

28

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

参考:

  1. adt-dev 组中提出的问题
  2. 实际错误 - #66841

解决方法(直到修复错误):

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

dependencies {
    // ...

    provided 'com.jakewharton.espresso:espresso:1.1-r2'
    androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
        exclude group: 'com.squareup.dagger'
    }
}
于 2014-04-26T00:32:37.663 回答
13

这个问题快把我逼疯了。似乎这是 Android Studio 中的一个已知错误。在我的情况下,它在我将父应用程序的构建类型从发布更改为调试后解决。希望这可能对某人有帮助

于 2014-12-04T06:42:54.997 回答
11

浓缩咖啡 2.0

最近发布了Espresso 2.0,使其成为Android 支持库的一部分。这是在 android dev 博客上宣布的

设置指南

他们还链接了更新的设置指南。在那里,您可以找到从头开始配置或更新现有 espresso 2.0 配置的说明。

其他提示

更改是以上 2 个链接包含您需要的所有信息。如果没有,我在下面列出了一些常见错误

将 Android Studio 升级到 1.0。*

首先升级您的 android Studio 版本。您应该能够从稳定的构建渠道(=默认)中获得至少 1.0。所以只需使用菜单选项Android Studio > Check for updates...

要从最新消息中获取最新消息,您还可以进入首选项,搜索更新并将频道更改为canary 频道

将 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;

仪表赛跑者

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

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

并在您的运行配置中使用它作为检测运行器(仅限完整的类名):

android.support.test.runner.AndroidJUnitRunner

示例测试用例

以及一个要完成的示例测试用例。请注意,这MainActivity是您要测试的活动。测试本身是以 test 开头的公共方法,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());
    }
}

有关编写测试的更多信息,请访问 espresso 入门指南

于 2015-01-02T09:02:03.447 回答
4

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

于 2014-09-12T18:59:10.373 回答
3

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

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

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

android { ... testBuildType "staging" }

于 2015-07-07T17:09:28.350 回答
3

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

我添加了以下行,一切正常。

import static android.support.test.espresso.Espresso.*;
于 2016-02-20T19:15:07.203 回答
1

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

于 2014-03-07T19:00:29.657 回答
1

我已经尝试了上面猜到的所有解决方案,但仍然得到 class not found 错误。

我想出了我的解决方案,它拯救了我的一天。因此,如果您在 Studio 中打开项目文件夹左侧的项目选项卡并检查构建变体,您可以看到,您的项目设置为unit test。您必须将其重新设置为 Android Instrumentation Tests 并确保您的 test.java 文件位于 **src\androidTest\java** 下

于 2015-09-02T11:14:11.973 回答
1

尝试这些依赖项:

implementation 'com.android.support.test.espresso:espresso-contrib:3.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

我遇到了这个问题,我浏览并添加了我可以添加到我的 gradle 文件中的每个浓缩咖啡库。等待黄色灯泡亮起,然后单击添加库并搜索您没有的 espresso 库。我不知道这是否适用于所有人,但它对我有用。

于 2021-12-19T03:34:24.093 回答