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]()
Ответы
Ответ 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 **