Тесты не найдены при использовании пользовательского бегуна
Я использую androidx.test
библиотеки (которые я недавно перенес) в моем проекте и с использованием пользовательских AndroidJUnitRunner
, До миграции все работало нормально, но теперь я получаю эту ошибку -
Started running tests
Test running failed: Instrumentation run failed due to 'Process crashed.'
Empty test suite.
Пользовательский класс бегуна, который я использую, простирается от androidx.test.runner.AndroidJUnitRunner
В моем приложении build.gradle
файл у меня есть следующие настройки -
testInstrumentationRunner "com.example.CustomTestRunner"
с зависимостями -
androidTestImplementation "androidx.test.ext:junit:1.1.0"
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test:core:1.1.0'
androidTestImplementation "androidx.test:rules:1.1.1"
Все мои тестовые занятия @RunWith(androidx.test.ext.junit.runners.AndroidJUnit4.class)
Я застрял в этом. Любая помощь будет оценена. Благодарю.
4 ответа
Я видел это во время тестирования с использованием Android 4.4. Когда я переключился на Android 6 (SDK 23), проблема исчезла.
Я использовал androidx.test.ext.junit.runners.AndroidJUnit4 для своих инструментальных тестов @RunWith(AndroidJunit4.class)
но мой testInstrumentationRunner использует пакет:
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
Смешивание двух разных пакетов кажется странным, но это работает.
мое приложение /build.gradle имеет:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
unitTests {
includeAndroidResources = true
}
}
useLibrary 'android.test.runner'
useLibrary 'android.test.base'
useLibrary 'android.test.mock'
}
dependencies {
//--------------------------------------------------------------------------------
// Test Dependencies
// Required -- JUnit 4 framework for standard unit tests.
testImplementation "junit:junit:$rootProject.ext.junitVersion"
androidTestImplementation "junit:junit:$rootProject.ext.junitVersion"
androidTestImplementation "org.hamcrest:hamcrest-library:$rootProject.ext.hamcrestVersion"
// Mockito framework for NMEA-parser unit tests.
testImplementation "org.mockito:mockito-core:$rootProject.ext.mockitoVersion"
// Room testing
androidTestImplementation "androidx.room:room-testing:$rootProject.ext.roomVersion"
// Core library
androidTestImplementation "androidx.test:core:$rootProject.ext.testCoreVersion"
androidTestImplementation "androidx.arch.core:core-testing:$rootProject.ext.coreVersion"
// AndroidJUnitRunner and JUnit Rules
// deprecated
androidTestImplementation "androidx.test:runner:$rootProject.ext.runnerVersion"
androidTestImplementation "androidx.test:rules:$rootProject.ext.rulesVersion"
// Assertions
androidTestImplementation "androidx.test.ext:junit:$rootProject.ext.junitRunnerVersion"
androidTestUtil "androidx.test:orchestrator:$rootProject.ext.orchestratorVersion"
// androidTestImplementation "androidx.test.ext:truth:$rootProject.ext.xTruthVersion"
// androidTestImplementation "com.google.truth:truth:$rootProject.ext.truthVersion"
// Espresso dependencies
// androidTestImplementation "androidx.test.espresso:espresso-core:$rootProject.ext.espressoVersion"
// androidTestImplementation "androidx.test.espresso:espresso-contrib:$rootProject.ext.espressoVersion"
// androidTestImplementation "androidx.test.espresso:espresso-intents:$rootProject.ext.espressoVersion"
// androidTestImplementation "androidx.test.espresso:espresso-accessibility:$rootProject.ext.espressoVersion"
// androidTestImplementation "androidx.test.espresso:espresso-web:$rootProject.ext.espressoVersion"
// androidTestImplementation "androidx.test.espresso.idling:idling-concurrent:$rootProject.ext.espressoVersion"
// androidTestImplementation "androidx.test.espresso:espresso-idling-resource:$rootProject.ext.espressoVersion"
}
configurations {
all {
resolutionStrategy {
force "androidx.recyclerview:recyclerview:$rootProject.ext.recyclerviewVersion"
force "org.checkerframework:checker-qual:$rootProject.ext.checkerQualVersion"
force "org.checkerframework:checker-compat-qual:$rootProject.ext.checkerQualVersion"
force "com.google.errorprone:error_prone_annotations:$rootProject.ext.errorProneAnnotationsVersion"
}
}
}
and I have these library versions:
// Core Test library
testCoreVersion = '1.1.0'
coreVersion = '2.0.0-alpha1'
// Automated Test Libraries
// Instrumentation Test Runner
junitRunnerVersion = '1.1.0'
runnerVersion = '1.1.1'
rulesVersion = '1.1.1'
xTruthVersion = '1.0.0'
truthVersion = '0.42'
espressoVersion = '3.1.0'
hamcrestVersion = '1.3'
orchestratorVersion = '1.1.0'
// JUnit library version
junitVersion = '4.12'
// Mockito version
mockitoVersion = '2.21.0'
// Force testing dependencies
recyclerviewVersion = '1.0.0'
checkerQualVersion = '2.5.3'
errorProneAnnotationsVersion = '2.3.1'
Я столкнулся с той же проблемой при использовании настраиваемого класса Runner для использования настраиваемого класса Application.
Что случилось:
Моя проблема заключалась в том, что я передавал только имя класса, а не имя пакета +.
Неправильно:
package com.teebalhoor.oredoh
import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner
/**
* Created by Muhammad Maqsood on 13/09/2020.
*/
class CustomTestRunner : AndroidJUnitRunner() {
override fun newApplication(
cl: ClassLoader?,
className: String?,
context: Context?
): Application {
return super.newApplication(cl, OredohTestApplication::class.java.simpleName, context)
}
}
Правильно:
package com.teebalhoor.oredoh
import android.app.Application
import android.content.Context
import androidx.test.runner.AndroidJUnitRunner
/**
* Created by Muhammad Maqsood on 13/09/2020.
*/
class CustomTestRunner : AndroidJUnitRunner() {
override fun newApplication(
cl: ClassLoader?,
className: String?,
context: Context?
): Application {
return super.newApplication(cl, OredohTestApplication::class.java.canonicalName, context)
}
}
Работало нормально, когда я заменил (Дайте только имя)
OredohTestApplication::class.java.simpleName
с (указать пакет + имя)
OredohTestApplication::class.java.canonicalName
Что помогло нам выяснить проблему, которая возникла в нашей настройке, так это запуск тестов в режиме отладки.
Сделав это, трассировка стека была сохранена, и мы могли видеть, что наш фальшивый/тестовый график Dagger2 инициализировался неправильно, и приложение аварийно завершало работу, прежде чем какие-либо тесты могли быть запущены.
Я надеюсь, что это поможет кому-то столкнуться с той же проблемой.
Одна из возможных причин - старые приложения Test Orchestrator (orchestrator-1.1.1.apk) или Test Services (test-services-1.1.1.apk), которые были созданы для компонентов библиотеки поддержки Android и по-прежнему установлены на целевом устройстве. Откройте Настройки -> Все приложения, найдите их и удалите. При повторном запуске тестов из Android Studio будут установлены новые приложения, созданные для AndroidX, и ваша проблема может исчезнуть.