Инструментальные тесты выполняются на устройствах Android, физических или эмулируемых. Таким образом, они могут воспользоваться API-интерфейсами платформы Android. Таким образом, инструментальные тесты обеспечивают большую точность, чем локальные тесты, хотя они выполняются гораздо медленнее.
Мы рекомендуем использовать инструментальные тесты только в тех случаях, когда необходимо протестировать поведение реального устройства. AndroidX Test предоставляет несколько библиотек, которые при необходимости упрощают написание инструментированных тестов.
Настройте среду тестирования
В проекте Android Studio вы храните исходные файлы для инструментальных тестов в module-name/src/androidTest/java/
. Этот каталог уже существует, когда вы создаете новый проект, и содержит пример инструментированного теста.
Прежде чем начать, вам следует добавить тестовые API AndroidX, которые позволят вам быстро создавать и запускать инструментированный тестовый код для ваших приложений. 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
:
Котлин
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) } } }
Ява
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 . Чтобы узнать больше, прочитайте руководство по тестированию пользовательского интерфейса .
Для получения дополнительной информации об использовании инструментальных тестов обратитесь к следующим ресурсам.