Почему я не могу импортировать AndroidJUnit4 и ActivityTestRule в класс unit test?
У меня проблемы с импортом некоторых предложений платформы тестирования пользовательского интерфейса Android - я просто не могу понять, что происходит не так!
Это мой класс:
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ExampleUnitTest {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);
@Test
public void listGoesOverTheFold() {
onView(withText("Hello world!")).check(matches(isDisplayed()));
}
}
Но по какой-то причине я получаю ошибки "не могу найти символ ActivityTestRule" и "не могу найти символ AndroidJUnit4". Я пытался импортировать их, но они не могут быть найдены.
Зависимости в build.gradle установлены в:
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
androidTestCompile 'com.android.support:support-annotations:23.4.0'
androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
Поэтому я думаю, что у меня есть все настройки зависимостей - я пробовал много вещей, но безуспешно.
У кого-нибудь есть идеи?
Ответы
Ответ 1
Есть два разных типа тестов, которые вы можете настроить в Android
Тесты устройств
- Они запускаются непосредственно на JVM и не имеют доступа к классам фреймворка Android.
- Они хранятся в пакете
test/java
- Зависимости необходимо добавить в файл build.gradle с помощью команды
testCompile
- Обычно вы используете Mockito, Robolectric и JUnit для этих тестов.
Тесты инструментария
- Они запускаются на эмуляторе Android и имеют полный доступ ко всем классам Android
- Они хранятся в пакете
androidTest/java
- Зависимости необходимо добавить в build.gradle с помощью
androidTestCompile
- Обычно вы используете Espresso и JUnit для этих тестов.
Из того, что я могу сказать, вы пытаетесь написать контрольные тесты с помощью Espresso, но имеете свой тест в пакете test/java
, который предназначен для модульных тестов. В этом случае вам нужно переместить свой тестовый класс в пакет androidTest/java
.
Ответ 2
Добавьте их в более новую версию:
androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
Ответ 3
нужны эти добавления зависимостей
testCompile 'com.android.support.test:rules:0.5'
testCompile 'com.android.support.test:runner:0.5'
Ответ 4
Добавление:
androidTestImplementation 'com.android.support.test:rules:1.0.2'
решает проблему, но не забудьте синхронизировать проект с файлами Gradle. Только тогда изменения вступят в силу.
Ответ 5
Добавить зависимость.
androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test:runner:0.5'
Ответ 6
Если вы перешли на AndroidX, используйте это:
androidTestImplementation 'androidx.test:rules:1.1.1'
androidTestImplementation 'androidx.test:runner:1.1.1'