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