Проблемы Roboelectric с новыми версиями Gradle и Android SDK

До недавнего времени я мог использовать roboelectric с gradle. Я постоянно получаю сообщение об ошибке Error:(6, 17) error: package org.junit does not exist. Я не совсем уверен и немного копался в этом.

Ниже мой проект build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
}

allprojects {
    repositories {
        mavenCentral()
        jcenter()
    }
}

Ниже мое приложение build.gradle:

repositories {
    mavenCentral()
    jcenter()
}

apply plugin: 'com.android.application'

android {
    ...

    sourceSets {
        androidTest.setRoot('src/test')
    }
}


dependencies {
    ...

    // Testing
    compile project(':core')
    testCompile 'org.robolectric:robolectric:2.4'
    testCompile 'junit:junit:4.+'
    testCompile 'org.easytesting:fest:1.0.16'
    testCompile 'com.squareup:fest-android:1.0.8'
}

мой основной проект build.gradle:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    testCompile 'org.robolectric:robolectric:2.4'
}

Я прочитал ниже об этом, и ничего здесь не сработало для меня:

https://www.bignerdranch.com/blog/all-in-together-android-studio-gradle-and-robolectric/ — подключаемый модуль студии Android, который должен использоваться, дает сбой в более новых версиях студии Android.

https://www.bignerdranch.com/blog/triumph-android-studio-1-2-sneaks-in-full-testing-support/ — это просто не решает проблему. Он не может найти org.junit.

https://discuss.gradle.org/t/why-cant-my-simplest-one-line-build-gradle-compile-tests-with-junit-jar/1868

Может ли кто-нибудь указать мне в правильном направлении для этого? Почему он не может обнаружить org.junit из build.gradle?


person KVISH    schedule 26.05.2015    source источник


Ответы (2)


Вы должны установить тестовый артефакт варианта сборки на Unit Tests.

введите здесь описание изображения

Мне больше не нужен был "основной" проект, поэтому я его удалил. Мой build.gradle для моего приложения выглядит так:

repositories {
    jcenter()
}

apply plugin: 'com.android.application'

android {
    ...
    sourceSets {
        androidTest.setRoot('src/test')
    }
}

dependencies {
    ...

    // Testing
    testCompile 'junit:junit:4.12'
    testCompile 'org.easytesting:fest:1.0.16'
    testCompile 'com.squareup:fest-android:1.0.8'
    testCompile('org.robolectric:robolectric:3.0-rc2') {
        exclude group: 'commons-logging', module: 'commons-logging'
        exclude group: 'org.apache.httpcomponents', module: 'httpclient'
    }
}
person KVISH    schedule 26.05.2015

В последний день я также столкнулся с проблемой. Наконец, я получил решение.

Ошибка связана с тем, что вы создали папку java для своего тестового класса как папку java, которая отображается синим цветом в студии Android. На самом деле она вам нужна зеленого цвета.

Для тестирования вам просто нужно создать папку с именем java, все остальное сделает сама студия Android.

для удаления зависимости от папки java вы можете удалить

  sourceSets {
    androidTest.setRoot('src/test')
}

код из build.gradle

тогда все будет работать нормально

person Arun Antoney    schedule 28.05.2015
comment
Это бессмысленно. Приведенная выше конфигурация взята прямо из документации. Вроде так должно быть написано. - person KVISH; 28.05.2015
comment
У меня уже работало. Мой ответ выше является принятым ответом в соответствии с документацией Roboelectric. По сути, вам нужно настроить среду модульного тестирования так, чтобы она включала JUnit. - person KVISH; 29.05.2015
comment
Кроме того, эта sourceSets очень важная линия. Он сообщает ему, как организовать код для модульных тестов. Я удивлен, что ваш проект gradle настроен правильно и все модульные тесты работают... Здесь, кажется, что-то еще не так. - person KVISH; 29.05.2015
comment
Могу ли я узнать, какой у вас цвет тестового java-файла? - person Arun Antoney; 29.05.2015
comment
Файл и пакет ниже выделены зеленым цветом. - person KVISH; 29.05.2015
comment
хорошо, тогда нет проблем, также нам не нужно сообщать студии Android, каков путь к нашей папке с исходным кодом, студия сделает это по-своему, используя некоторый алгоритм. - person Arun Antoney; 29.05.2015