Этот ответ предназначен для людей, которые только начинают тестирование Android. Я приведу два простых примера, которые помогут вам понять, как работает тестирование. Если вы будете следовать этим инструкциям в течение следующих 10 минут, у вас будет все готово, чтобы начать добавлять тесты в собственное приложение. Думаю, вы удивитесь, насколько это просто. Конечно, был.
Введение в тестирование Android
Вам предстоит пройти два разных типа тестов.
- Локальные модульные тесты. Они запускаются локально на JVM (виртуальной машине Java). Поскольку они местные, они быстрые. Вы можете использовать их для тестирования тех частей вашего кода, которым нужна только Java, а не Android API. (Иногда вы можете создать поддельный объект API, чтобы протестировать больше вещей локально. Это называется насмешкой . Например, макет
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());
}
}
Снова нажмите одну из этих зеленых кнопок.
Пока у вас подключено реальное устройство или настроен эмулятор, он должен был запустить его и запустить ваше приложение. Поздравляем, вы только что выполнили свой первый инструментальный тест!
Сделайте свой собственный тест
В инструментальных тестах для запуска тестов используется эспрессо . Это похоже на вашего собственного маленького пользователя-робота, которого вы можете протестировать. Вы можете сказать ему сделать что-то вроде нажатия кнопки или чтения свойств 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>
Затем нажмите « Выполнить»> «Записать тест эспрессо» в меню.
После его запуска нажмите кнопку в эмуляторе, а затем, чтобы закончить, выберите ОК в диалоговом окне «Запись». Он должен автоматически сгенерировать следующий тестовый код.
@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());
}
}
Большой! Вы только что создали свой первый инструментальный тест! Это было очень просто. Вам, вероятно, следует добавить утверждение, чтобы провести настоящий тест, но это довольно легко сделать и с рекордером. Посмотрите это видео, чтобы узнать больше.
Дальнейшее обучение
Я сначала смотрел видео, а потом читал документацию. Все это очень помогает. Последняя ссылка - это серия статей, в которых рассказывается о некоторых важных вещах, о которых следует подумать при выборе того, что тестировать.