Как я могу создавать тесты в Android Studio?
Просто скачан Android Studio, основанный на идее Intellij Idea.
Как создать тесты?
Я замечаю, что есть возможность создать тестовый модуль, но это ничего не делает, только создайте новый проект с помощью src
Я также попытался нажать горячую клавишу CTRL + AlT + T, которая позволяет создавать модульные тесты для существующего класса, но, похоже, хочет разместить его в текущем проекте. Конечно, это не помогает с TDD
Есть ли у кого-нибудь опыт?
Ответы
Ответ 1
Изменить: с 0.1.8 это теперь поддерживается в среде IDE. Пожалуйста, следуйте инструкциям там, вместо использования нижеприведенных инструкций.
Следуя Android Gradle Руководство пользователя плагина, я смог получить тесты, работающие в командной строке, выполнив следующие шаги для вновь созданного проекта (я использовал пакет по умолчанию "com.example.myapplication" ):
- Добавить каталог src/instrumentTest/java для тестов
- Добавить тестовый класс (расширяющий ActivityTestCase) в пакете com.example.myapplication.test
- Запустить виртуальное устройство
- В командной строке (в каталоге MyApplicationProject/MyApplication) используйте команду "../gradlew connectedInstrumentTest"
Это провело мои тесты и поместило результаты теста в MyApplicationProject/MyApplication/build/reports/instrumentTests/connected. Я новичок в тестировании приложений для Android, но, похоже, он работает нормально.
В среде IDE можно попробовать запустить один и тот же тестовый класс. Вам нужно
- Обновить build.gradle для отображения Maven Central как репо
- Обновление build.gradle добавляет JUnit 3.8 в качестве зависимости инструмента TESTCompile, например. instrumentTestCompile 'junit: junit: 3.8'
- В "Структура проекта" вручную переместите JUnit первым в порядке зависимости
Однако это терпит неудачу (в классеpath, используемом при запуске тестов, отсутствует тестовый выходной каталог). Тем не менее, я не уверен, что это будет работать независимо от того, насколько я понимаю, что требуется специальный тестовый бегун для Android.
Ответ 2
Я бы предложил использовать файл gradle.build.
-
Добавьте каталог src/androidTest/java для тестов (как Chris начинает объяснять)
-
Откройте файл gradle.build и укажите там:
android {
compileSdkVersion rootProject.compileSdkVersion
buildToolsVersion rootProject.buildToolsVersion
sourceSets {
androidTest {
java.srcDirs = ['androidTest/java']
}
}
}
-
Нажмите "Синхронизировать проект с Gradle файлом" (на верхней панели). Теперь вы должны увидеть папку "java" (внутри "androidTest" ) - это зеленый цвет.
-
Теперь вы можете создавать там тестовые файлы и выполнять их.
Ответ 3
Я думаю, этот пост от Rex St John очень полезен для модульного тестирования с помощью студии android.
http://rexstjohn.com/wp-content/uploads/2014/01/Screen-Shot-2014-01-24-at-6.26.20-PM-300x137.png
Ответ 4
Этот ответ предназначен для людей, которые только начинают работать с Android-тестированием. Я приведу два простых примера, которые помогут вам понять, как работает тестирование. Если вы последуете в течение следующих 10 минут, вы все настроите, чтобы начать добавлять свои тесты в свое приложение. Я думаю, вы будете удивлены, насколько это просто. Я определенно был.
Введение в Android-тестирование
Есть два разных типа тестов, которые вы будете делать.
- Локальные тесты. Они запускаются локально на JVM (виртуальная машина Java). Поскольку они локальные, они быстры. Вы можете использовать их для проверки частей своего кода, которым требуется Java, а не API Android. (Иногда вы можете сделать фальшивый объект API для локального тестирования других вещей. Это называется mocking. Макет
Context
является примером.)
- Тестируемые тесты. Эти тесты выполняются на реальном устройстве или в эмуляторе. Это делает их медленнее, чем локальные тесты. Однако они более гибкие, потому что у вас есть полный Android API, доступный для вас.
Создайте новый проект, и вы увидите следующие папки по умолчанию.
![введите описание изображения здесь]()
Все уже существует и ждет, когда вы создадите свои тесты. Все это уже настроено!
Как создать локальные модульные тесты
Откройте файл ExampleUnitTest
, показанный на картинке выше. он должен выглядеть примерно так:
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
assertEquals(4, 2 + 2);
}
}
Нажмите двойную зеленую стрелку, чтобы запустить все тесты или одну зеленую стрелку, чтобы запустить только одну. (В этом случае есть только один тест, чтобы они оба делали то же самое.)
![введите описание изображения здесь]()
Он должен пройти (пока 2 + 2
все еще 4
, когда вы читаете этот ответ). Поздравляем, вы только что проверили свой первый тест!
Создание собственного теста
Позвольте написать собственный тест. Сначала добавьте этот класс в свой основной проект приложения, чтобы у нас есть что испытать:
public class MyClass {
public int add(int a, int b) {
return a + b;
}
}
Теперь измените метод addition_isCorrect()
в тестовом классе как следующий код (или просто добавьте другой метод с другим именем):
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
MyClass myClass = new MyClass();
int result = myClass.add(2, 2);
int expected = 4;
assertEquals(expected, result);
}
}
Запустите его снова, и вы увидите, как он пройдет. Поздравляем, вы только что создали свой собственный первый тест! (Ну, я думаю, технически это было мое, но, эй, достаточно близко. Какая моя твоя.)
Как создать инструментальные тесты
Откройте файл ExampleInstrumentedTest
. он должен выглядеть примерно так:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.example.myapp", appContext.getPackageName());
}
}
Снова нажмите одну из этих зеленых кнопок.
![введите описание изображения здесь]()
Пока у вас есть реальное устройство, подключенное или настроенный эмулятор, он должен был запустить его и запустить приложение. Поздравляем, вы только что проверили свой первый инструментальный тест!
Создание собственного теста
В инструментальных тестах используется Espresso для запуска тестов. Это похоже на вашего собственного маленького пользователя-робота, с которым вы можете протестировать свое приложение. Вы можете сказать, что он сделал что-то вроде нажатия кнопки или чтения свойств TextView.
Вы можете написать инструкции о том, как выполнить тест вручную, но поскольку мы только начинаем, используйте функцию автоматической записи . Это супер просто.
Сначала добавьте кнопку в свой интерфейс, чтобы у нас было с чем работать. Я сделал это:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myapp.MainActivity">
<Button
android:id="@+id/myButton"
android:text="Click me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</android.support.constraint.ConstraintLayout>
Затем нажмите Запустить > Записать эспрессо-тест в меню.
![введите описание изображения здесь]()
После запуска нажмите кнопку в эмуляторе, а затем, чтобы закончить, выберите OK в диалоговом окне "Запись". Он должен автоматически генерировать следующий тестовый код.
@LargeTest
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void mainActivityTest() {
ViewInteraction appCompatButton = onView(
allOf(withId(R.id.myButton), withText("Click me"), isDisplayed()));
appCompatButton.perform(click());
}
}
Отлично! Вы только что создали свой первый инструментальный тест! Это было очень легко. Вероятно, вы должны добавить утверждение, чтобы сделать его настоящим испытанием, но это довольно легко сделать с рекордером. Смотрите это видео, чтобы идти немного глубже.
Дальнейшее исследование
Сначала я посмотрел видео, а затем прочитал документацию. Это все очень полезно. Последняя ссылка на ряд статей, которые охватывают некоторые важные вещи, о которых нужно подумать, когда вы выбираете, что тестировать.
Ответ 5
На данный момент (студия 0.61) достаточно поддерживать надлежащую структуру проекта.
Нет необходимости создавать отдельный тестовый проект, как в eclipse (см. Ниже).
![Tests structure]()
Ответ 6
Android Studio продолжает развиваться, поэтому вышеприведенные ответы в конечном итоге больше не применимы. Для текущей версии Android Studio 1.2.1.1 есть хороший учебник по тестированию по адресу:
http://evgenii.com/blog/testing-activity-in-android-studio-tutorial-part-1/
Ответ 7
Одним из основных изменений, по-видимому, является то, что в Android Studio тестовое приложение интегрировано в проект приложения.
Я не уверен, что это помогает вашей конкретной проблеме, но я нашел руководство по проведению тестов с проектом Gradle.
Android Gradle руководство пользователя
Ответ 8
Самый простой способ, который я нашел, - упорядочить в мой следующий пост в блоге:
- Создайте папку, в которой вы будете писать все ваши модульные тесты (желательно com.example.app.tests)
- Создайте новый тестовый класс (желательно NameOfClassTestedTests, например, BankAccountLoginActivityTests)
- Расширить InstrumentationTestCase
- Запишите неудачный unit test, чтобы убедиться, что нам удалось настроить модульные тесты
- Обратите внимание, что имя метода unit test должно начинаться со слова "test" (предпочтительно testTestedMethodNameExpectedResult() i.e testBankAccountValidationFailedShouldLogout())
- Настройте проект для модульных тестов:
- Откройте меню "Выполнить..." и нажмите "Редактировать конфигурации"
- Нажмите кнопку +
- Выберите шаблон Android Tests
- Введите имя для вашей конфигурации запуска (желательно "тесты AppName" )
- Выберите свое приложение в модуле combobox
- Выберите переключатель "Все в пакете" (обычно вы должны выбрать этот вариант, потому что он выполняет все модульные тесты во всех ваших тестовых классах)
- Заполните имя тестового пакета с шага 1 (например, com.example.app.tests)
- Выберите устройство, для которого вы хотите запустить тесты.
- Применить и сохранить конфигурацию
- Выполнить тесты модулей (и ожидать сбой):
- Выберите новую созданную конфигурацию тестов в меню "Выполнить"
- Нажмите "Выполнить" и прочитайте результаты в выходной консоли.
Удачи, сделав ваш код более удобочитаемым, удобным и проверенным!
Ответ 9
Android Studio была своего рода движущейся целью, сначала являющейся предварительным просмотром разработчика и теперь находящимся в бета-версии.
Путь для классов Test в проекте изменился во времени, но независимо от того, какую версию AS вы используете, путь объявляется в вашем .iml файле. В настоящее время с версией 0.8.3 вы найдете следующее внутри внутреннего iml файла:
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/groovy" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
В файле .iml указывается, где разместить тестовые классы.
Ответ 10
Начиная с Android Studio 1.1, у нас есть официальная (экспериментальная) поддержка для написания Unit Tests (Roboelectric работает также).
Источник: https://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support
Ответ 11
Добавьте ниже lib внутри файла gradle
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
Создайте класс HomeActivityTest внутри каталога androidTest и перед запуском теста добавьте строку flurry_api_key и sender_id в файл строковых ресурсов и измените значение для случая сбоя и успеха.
@RunWith(AndroidJUnit4.class)
public class HomeActivityTest
{
private static final String SENDER_ID = "abc";
private static final String RELEASE_FLURRY_API_KEY = "xyz";
@Test
public void gcmRegistrationId_isCorrect() throws Exception
{
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
Assert.assertEquals(SENDER_ID, appContext.getString(R.string.sender_id));
}
@Test
public void flurryApiKey_isCorrect() throws Exception
{
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
Assert.assertEquals(RELEASE_FLURRY_API_KEY, appContext.getString(R.string.flurry_api_key));
}
}
Ответ 12
Android Studio v.2.3.3
Выделите контекст кода, который вы хотите проверить, и используйте горячую клавишу: CTRL
+ SHIFT
+ T
Используйте диалоговый интерфейс, чтобы завершить настройку.
Предполагается, что структура тестирования отражает ваш макет пакета проекта для достижения наилучших результатов, но вы можете вручную создавать собственные тесты, если у вас есть правильные настройки каталога и сборки.