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--> команда, не сделал этого, и я должен был сделать это вручную


вы также можете попробовать аннулировать кэш и перезапустить опцию в studio в меню Файл