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
{
...
}

アプリ build.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 ...これは、エラー メッセージで検索したときの最初の Google ヒットの 1 つであるため、ここに私の経験を追加します。

build.gradle最近のバージョンのツールと android プラグインを使用すると、次のようにテストを実行する以外に何も必要ないようです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

compile project(':Common')おそらくAndroidライブラリである可能性が高いです。ただし、そのライブラリ以外に を使用する理由はありませんMultiDex

使用するには、フォルダーInstrumentationTestRunnerに Instrumentation Tests が必要です。androidTest

src/main/java「Eclipse ベースの」プロジェクト構造を Android Studio のデフォルトの Gradle 構造に移動することを強くお勧めしsrc/test/javaますsrc/androidTest/java

build.gradle

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

アプリ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 に答える