Инструментальные тесты выполняются на устройствах Android, как физических, так и эмулированных. Поэтому они могут использовать API фреймворка Android. Поэтому инструментальные тесты обеспечивают более высокую точность, чем локальные, хотя и выполняются гораздо медленнее.
Рекомендуем использовать инструментальные тесты только в тех случаях, когда вам нужно проверить поведение приложения на реальном устройстве. AndroidX Test предоставляет несколько библиотек, которые упрощают написание инструментальных тестов.
Как настроить тестовую среду
В проекте Android Studio исходные файлы для инструментальных тестов хранятся в каталоге module-name/src/androidTest/java/. Этот каталог уже существует при создании нового проекта и содержит пример инструментального теста.
Прежде чем начать, добавьте AndroidX Test API, которые позволяют быстро создавать и запускать инструментальные тесты для приложений. AndroidX Test включает исполнитель тестов JUnit 4 (AndroidJUnitRunner) и API для функциональных тестов интерфейса, например Espresso, UI Automator и Compose test.
Вам также нужно настроить зависимости тестирования Android для проекта, чтобы использовать средство запуска тестов и API правил, предоставляемые AndroidX Test.
В файле build.gradle верхнего уровня укажите эти библиотеки в качестве зависимостей:
dependencies {
androidTestImplementation "androidx.test:runner:$androidXTestVersion"
androidTestImplementation "androidx.test:rules:$androidXTestVersion"
// Optional -- UI testing with Espresso
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
// Optional -- UI testing with UI Automator
androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
// Optional -- UI testing with Compose
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
}
Последние версии можно найти в примечаниях к выпуску AndroidX и примечаниях к выпуску Compose UI.
Чтобы использовать тестовые классы JUnit 4 и получить доступ к таким функциям, как фильтрация тестов, укажите AndroidJUnitRunner в качестве средства запуска тестов по умолчанию в своем проекте. Для этого добавьте в файл build.gradle на уровне модуля приложения следующую настройку:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
Создайте класс инструментального теста
Класс инструментального теста должен быть тестовым классом JUnit 4, похожим на класс, описанный в разделе Создание локальных тестов.
Чтобы создать класс инструментированного теста JUnit 4, укажите AndroidJUnit4 в качестве средства запуска тестов по умолчанию.
В примере ниже показано, как написать инструментальный тест, чтобы проверить, правильно ли реализован интерфейс Parcelable для класса LogHistory.
Kotlin
import android.os.Parcel import android.text.TextUtils.writeToParcel import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith const val TEST_STRING = "This is a string" const val TEST_LONG = 12345678L // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4::class) @SmallTest class LogHistoryAndroidUnitTest { private lateinit var logHistory: LogHistory @Before fun createLogHistory() { logHistory = LogHistory() } @Test fun logHistory_ParcelableWriteRead() { val parcel = Parcel.obtain() logHistory.apply { // Set up the Parcelable object to send and receive. addEntry(TEST_STRING, TEST_LONG) // Write the data. writeToParcel(parcel, describeContents()) } // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0) // Read the data. val createdFromParcel: LogHistory = LogHistory.CREATOR.createFromParcel(parcel) createdFromParcel.getData().also { createdFromParcelData: List<Pair<String, Long>> -> // Verify that the received data is correct. assertThat(createdFromParcelData.size).isEqualTo(1) assertThat(createdFromParcelData[0].first).isEqualTo(TEST_STRING) assertThat(createdFromParcelData[0].second).isEqualTo(TEST_LONG) } } }
Java
import android.os.Parcel; import android.util.Pair; import androidx.test.runner.AndroidJUnit4; import com.google.common.truth.Truth.assertThat; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4.class) public class LogHistoryAndroidUnitTest { public static final String TEST_STRING = "This is a string"; public static final long TEST_LONG = 12345678L; private LogHistory mLogHistory; @Before public void createLogHistory() { mLogHistory = new LogHistory(); } @Test public void logHistory_ParcelableWriteRead() { // Set up the Parcelable object to send and receive. mLogHistory.addEntry(TEST_STRING, TEST_LONG); // Write the data. Parcel parcel = Parcel.obtain(); mLogHistory.writeToParcel(parcel, mLogHistory.describeContents()); // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0); // Read the data. LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel); List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData(); // Verify that the received data is correct. assertThat(createdFromParcelData.size()).isEqualTo(1); assertThat(createdFromParcelData.get(0).first).isEqualTo(TEST_STRING); assertThat(createdFromParcelData.get(0).second).isEqaulTo(TEST_LONG); } }
Как запустить инструментальные тесты
Инструментальные тесты можно запускать на реальных устройствах или эмуляторах. В руководстве по Android Studio вы узнаете, как:
Дополнительные ресурсы
Тесты пользовательского интерфейса обычно являются инструментальными тестами, которые проверяют правильность поведения пользовательского интерфейса. Они используют такие фреймворки, как Espresso или Compose Test. Подробнее о тестировании пользовательского интерфейса…
Дополнительную информацию об инструментальных тестах можно найти в следующих ресурсах: