代码之家  ›  专栏  ›  技术社区  ›  Gyoo

在没有多重索引的情况下使用Robolectric?

  •  1
  • Gyoo  · 技术社区  · 9 年前

    我正在开发一个Android应用程序,我想使用Robolectric进行测试。

    我遇到的主要问题是,每当我把Robolectric(和其他一些测试库)加入到我的成绩中时。构建文件时,我收到Dex错误,因此我需要启用多出口库(我正在处理 Android 4.4 ).

    正因为如此,我无法再编译了,这需要太长时间。如果没有Robolectric和multidex,编译可能需要一分钟时间,如果包含Robolecteric和multitex,超过30分钟后我什么也得不到。

    这是我的完整成绩文件:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 22
        buildToolsVersion "22.0.1"
    
        defaultConfig {
            applicationId "cm.smobilpay.testapp"
            minSdkVersion 19
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            debug {
                debuggable true
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                testCoverageEnabled true
                multiDexEnabled true
            }
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                testCoverageEnabled false
            }
        }
    
        productFlavors {
            unitTest // Creates a new scope which wraps only unit tests
        }
    
        sourceSets {
            unitTest {
                java {
                    srcDir 'src/test/java' // New scope includes our unit test folder
                }
            }
        }
    
        // Prevent conflicts between Robolectric's dependencies
        packagingOptions {
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/dependencies.txt'
            exclude 'META-INF/LGPL2.1'
            exclude 'LICENSE.txt'
            exclude 'LICENSE'
        }
    
        lintOptions {
            abortOnError false
            xmlReport true
        }
    
    }
    
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile(name:'s3papiandroidclient', ext:'aar')
        compile 'com.android.support:appcompat-v7:22.2.0'
        compile 'com.squareup.retrofit:retrofit:1.9.0'
        compile 'joda-time:joda-time:2.8.1'
        compile 'com.android.support:multidex:1.0.0'
    
    
        // Unit testing dependencies
        testCompile group: 'org.hamcrest', name: 'hamcrest-core', version: '1.3'
        testCompile group: 'junit', name: 'junit-dep', version: '4.10'
        testCompile group: 'org.hamcrest', name: 'hamcrest-library', version: '1.3'
    
        unitTestCompile('org.robolectric:robolectric:3.0-rc3') {
            exclude module: 'classworlds'
            exclude module: 'commons-logging'
            exclude module: 'httpclient'
            exclude module: 'maven-artifact'
            exclude module: 'maven-artifact-manager'
            exclude module: 'maven-error-diagnostics'
            exclude module: 'maven-model'
            exclude module: 'maven-project'
            exclude module: 'maven-settings'
            exclude module: 'plexus-container-default'
            exclude module: 'plexus-interpolation'
            exclude module: 'plexus-utils'
            exclude module: 'wagon-file'
            exclude module: 'wagon-http-lightweight'
            exclude module: 'wagon-provider-api'
        }
    }
    

    我的问题是 :在我的项目中包含Robolectric时,我做错了什么,导致我被迫使用multidex?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Alex Florescu    9 年前

    你的索引中根本不应该包含Robolectric。Robolectric测试在JVM上运行,它们不会部署在设备上。

    你应该把它包括在 testCompile 如中所述 the docs .

    testCompile "org.robolectric:robolectric:3.0"