Подтвердить что ты не робот

Android Studio не распознает классы Espresso

Я запускаю Android Studio 0.5.0 с Gradle 1.11. Я пытаюсь установить библиотеку Espresso из com.jakewharton.espresso: espresso: 1.1-r2. По какой-то причине 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

4b9b3361

Ответ 1

Так что это в основном ошибка с Android Studio (я предполагаю).

Ссылка:

Обходной путь (до устранения ошибки):

Добавьте дубликат, указанный в вашем файле gradle, таким образом:

dependencies {
    // ...

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

Ответ 2

Эта проблема сводила меня с ума. И похоже, что это известная ошибка в Android Studio. В моем случае это было разрешено после того, как я изменил тип сборки с Release на Debug для родительского приложения. Надеюсь, это может быть полезно для кого-то.

Ответ 3

Espresso 2.0

Недавно был выпущен Espresso 2.0, сделав его частью поддержки Android. Это было анонсировано в блоге android dev.

Руководство по настройке

С этим они также связали обновленное руководство по настройке. Там вы можете найти инструкции для настройки с нуля или для обновления существующей конфигурации espresso для 2.0.

Другие советы

Изменения, указанные выше, содержат всю необходимую информацию. Если нет, я привел некоторые распространенные ошибки ниже

Обновите Android Studio до версии 1.0. *

Начните с обновления сборки Android. Вы должны иметь возможность получить не менее 1.0 из стабильных каналов сборки (= по умолчанию). Поэтому просто используйте опцию меню Android Studio > Проверить наличие обновлений....

Чтобы получить последние последние сведения, вы также можете перейти в "Настройки", выполнить поиск обновлений и изменить канал на канальный канал.

Обновить библиотеку поддержки Android до версии 11 +

Espresso был включен в библиотеку поддержки с версии 11, поэтому вам нужно получить хотя бы ту версию. Проверьте наличие обновлений с помощью диспетчера Android SDK. Библиотека поддержки находится в дереве Дополнительно внизу.

Новые зависимости и пространство имен

Если вы обновляетесь из более старой версии эспрессо, вам придется обновлять зависимости и пространство имен. Для новых проектов просто добавьте их в 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 - ваш actvitiy, который вы хотите проверить. Сами тесты - это общедоступные методы, которые начинаются с теста, например 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());
    }
}

Для получения дополнительной информации о написании тестов посетите руководство по эспрессо.

Ответ 4

Шесть месяцев спустя это все еще проблема, и ошибка, на которую ссылается первоначальный ответчик, была вновь открыта: https://code.google.com/p/android/issues/detail?id=66841 и получила более высокий приоритет. Я еще не смог заставить Android Studio распознавать классы Espresso, и использование "предоставленной" области для зависимостей не помогло исправить эту проблему для меня. (С использованием AS 0.8.6 и Gradle 0.12.2)

Ответ 5

согласно http://tools.android.com/tech-docs/new-build-system/user-guide проверяется только один тип сборки, по умолчанию это отладочный тип сборки.

Поэтому проверьте, что вы используете вариант сборки отладки и перестраиваете приложение. В других типах сборки все ваши зависимости от androidTest не будут видны.

Если вам нужно проверить свой текущий тип сборки, вы можете сделать что-то вроде этого:

android {   ...   testBuildType "staging" }

Ответ 6

Android Studio 1.5.1 не реализовал методы onView() или onData() в моем случае. Я просто сделал статический импорт класса Espresso и всех его методов.

Я добавил строку ниже, и все сработало отлично.

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

Ответ 7

Вы не знаете, в каком исходном файле вы видите ошибку, но, основываясь на моем тестировании, я думаю, вы пытаетесь получить доступ к классам Espresso из одного из ваших основных классов приложений (внутри src/Основной/Java/). Если это так, это не сработает, потому что вы включили Espresso через include androidTestCompile dependency include, что делает его доступным только для ваших тестовых классов, которые должны находиться под src/androidTest/java.

Ответ 8

Я пробовал все решения, о которых догадывались выше, и до сих пор не получил ошибку класса.

Я понял свое решение, это спасло мой день. Поэтому, если вы открываете вкладку проекта слева в папках проекта в Studio и проверяете варианты сборки, вы можете видеть, что ваш проект имеет значение unit test. Вы должны переустановить его на Android Instrumentation Tests и убедитесь, что ваш файл test.java находится под  ** ЦСИ \androidTest\Java **