Android jUnit тест java.ленг.Ошибке типа noclassdeffounderror: андроид/базы данных/базы данных SQLite/SQLiteOpenHelper
Я пытаюсь запустить модульные тесты, которые издеваются над дочерним классом SQLiteOpenHelper
но я получаю следующую ошибку.
java.lang.NoClassDefFoundError: android/database/sqlite/SQLiteOpenHelper
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access0(URLClassLoader.java:73)
...
at org.dfhu.vpodplayer.util.JsonExporterTest.export(JsonExporterTest.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
...
мой файл Gradle выглядит как
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion '25.0.1'
defaultConfig {
applicationId "org.dfhu.vpodplayer"
minSdkVersion 18
targetSdkVersion 24
versionCode 1
versionName "1.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
targetCompatibility 1.7
sourceCompatibility 1.7
}
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
compile 'com.android.support:recyclerview-v7:24.2.1'
testCompile 'junit:junit:4.12'
testCompile 'org.powermock:powermock-api-mockito:1.6.5'
testCompile 'org.powermock:powermock-module-junit4:1.6.5'
}
это работало до переустановки, Android Studio и обновления до builtToolsVersion '25.0.1'.
Я ищу способ получить мои зависимости android в моем тестовом раннере.
5 ответов
иногда Android Studio неправильно загружает классы Android в путь к классам для тестирования. В нашем случае это обычно android.os.Parcelable
. Но CI всегда работает нормально.
и ./gradlew test
всегда должен работать в таких случаях и с некоторой удачей исправлять зависимости для Android Studio.
(этот был сбивает с толку и бесит меня на некоторое время, и я очень рад, что я, наконец, добрался до сути!)
первое, что нужно отметить, это то, что после запуска следующей команды в вашем проекте...
gradle clean build
... вы должны посмотреть build/generated/mockable-android-XX.jar
файл в рабочей области. Этот файл генерируется mockableAndroidJar
Gradle задача, которая выполняется как часть test
Gradle задача, которая выполняется как часть build
Gradle в Задача.
проблема возникает, когда этот файл отсутствует в рабочей области, но Gradle, к сожалению, оценивает mockableAndroidJar
задача должна быть актуальной и поэтому пропускает ее выполнение. Это можно проверить, выполнив следующую команду...
gradle mockableAndroidJar --info
... и вы увидите следующее сообщение...
Skipping task ':Android:mockableAndroidJar' as it is up-to-date (took 0.001 secs).
на решение это заставить работать mockableAndroidJar
Gradle задача, которую вы можете сделать, выполнив следующее команда...
gradle mockableAndroidJar --rerun-tasks
... И вуаля! теперь вы должны увидеть build/generated/mockable-android-XX.jar
файл снова появится в вашем рабочем пространстве и рад, что ваши модульные тесты Android будут запущены снова.
столкнувшись с этой проблемой сегодня, я хотел бы поделиться тем, что я сделал, чтобы заставить его работать снова.
в свою сборку.gradle Файл, Добавить:
android {
...
testOptions {
unitTests.returnDefaultValues = true
}
}
и снова синхронизировать файлы gradle. Он должен работать сейчас,и должен быть сгенерирован файл jar для Android. Если у вас не было testOptions в вашем файле gradle, просто удалите его и повторите синхронизацию.
надеюсь, это поможет.
Ну в моем случае это было решено путем очистки . Не знаю, но почему-то ... --1--> команда, не сделал этого, и я должен был сделать это вручную