2

我在用着:

  • 安卓工作室 1.1.0
  • 摇篮 2.2.1
  • Gradle 的 Android 插件:1.1.0

我们最近搬到了 Android Studio,我们正在努力使我们的仪器测试工作。但是,当我运行测试时,它给了我错误

运行测试测试运行开始测试运行失败:找不到仪器信息:ComponentInfo{com.xxx.xxx.test/android.test.InstrumentationTestRunner} 空测试套件。

我不确定我在这里做错了什么。请看下面的配置:

应用类:

public class XxxApp extends MultiDexApplication
{
...
}

应用程序构建.gradle

apply plugin: 'com.android.application'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.google.android.gms:play-services-base:6.5.87'
    compile 'com.google.android.gms:play-services-maps:6.5.87'
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:multidex:1.0.0'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'com.google.code.gson:gson:2.3.1'
    compile 'joda-time:joda-time:2.7'
    compile 'org.roboguice:roboguice:2.0'
    compile project(':Common')
    compile project(':zxing-lib')
    androidTestCompile fileTree(dir: 'test-libs', include: '*.jar')
    androidTestCompile('com.android.support:multidex-instrumentation:1.0.1') {
        exclude group: 'com.android.support', module: 'multidex'
    }
    androidTestCompile 'com.google.dexmaker:dexmaker:1.+'
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.+'
    androidTestCompile 'junit:junit:4.11'
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    androidTestCompile 'org.mockito:mockito-core:1.9.5'
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"
    enforceUniquePackageName false
    dexOptions {
        javaMaxHeapSize "4g"
    }
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
        applicationId "com.xxx.xxx"
        multiDexEnabled true
        testApplicationId "com.xxx.xxx.test"
        testInstrumentationRunner 'android.test.InstrumentationTestRunner'
        // Does not work testInstrumentationRunner 'com.android.test.runner.MultiDexTestRunner'
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'LICENSE.txt'
    }
    lintOptions {
        abortOnError false
        checkReleaseBuilds false
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        androidTest.setRoot('tests')
        androidTest.java.srcDir('tests/src')
        androidTest.res.srcDir('tests/res')
        androidTest.assets.srcDirs('tests/assets')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
    productFlavors {
    }
}

测试班

public class XxxTests extends InstrumentationTestCase
{
   public void testXxx()
   {
    ...
   }
}

顶级 build.gradle

dependencies 
{
        classpath 'com.android.tools.build:gradle:1.1.0+'
}
4

2 回答 2

1

原始问题中描述的确切情况可能与旧版本的工具有关。

我在这里添加我的经验,因为这是使用... Unable to find ... ComponentInfo ...错误消息进行搜索时谷歌的第一个点击。

使用最新版本的工具和 android 插件,您似乎不需要任何其他东西build.gradle来获得测试multiDexEnabled true

...
android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
    }
}

(我有com.android.tools.build:gradle:1.5.0

于 2016-01-04T11:56:39.513 回答
0

I am not sure what compile project(':Common') is, most likely an Android Library; however, besides that library there is no reason for you to use MultiDex.

In order to use InstrumentationTestRunner you need Instrumentation Tests in the androidTest folder.

I would highly suggest you move your "Eclipse-based" project structure to Android Studio's default Gradle structure: "src/main/java, src/test/java and src/androidTest/java"

Top build.gradle:

dependencies {
    classpath 'com.android.tools.build:gradle:1.1.3' // <-- Updated
}

App build.gradle:

apply plugin: 'com.android.application'

dependencies {
    compile project(':Common') // <-- Not sure what this is
    compile 'com.google.android.gms:play-services-maps:6.5.87'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'com.google.code.gson:gson:2.3.1'
    compile 'joda-time:joda-time:2.7'
    compile 'org.roboguice:roboguice:2.0' // <-- There is a newer versoin, but might break your current code
    compile 'com.google.zxing:core:3.2.0'
    androidTestCompile 'com.google.dexmaker:dexmaker:1.+'
    androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.+'
    androidTestCompile 'junit:junit:4.12'
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    androidTestCompile 'org.mockito:mockito-core:1.9.5'
}

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.0"
    enforceUniquePackageName false

    dexOptions {
        javaMaxHeapSize "4g"
    }

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 22
        applicationId "com.xxx.xxx"
        testApplicationId "com.xxx.xxx.test"
        testInstrumentationRunner 'android.test.InstrumentationTestRunner'
    }

    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'LICENSE.txt'
    }

    lintOptions {
        abortOnError false
        checkReleaseBuilds false
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        // Move the tests to tests/java, tests/res, etc...
        androidTest.setRoot('tests')
        androidTest.java.srcDir('tests/src')
        androidTest.res.srcDir('tests/res')
        androidTest.assets.srcDirs('tests/assets')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
于 2015-03-18T11:39:09.060 回答