web-dev-qa-db-ja.com

テストの実行に失敗しました:ComponentInfo {}のインスツルメンテーション情報が見つかりません-Gradleを使用してIntelliJでテストしようとしてエラーが発生しました

テストを実行しようとするたびに、コンソールに次のように表示されます。

Running tests
Test running startedTest running failed: Unable to find instrumentation info for:
ComponentInfo{com.employeeappv2.employeeappv2.test/Android.test.InstrumentationTestRunner}
Empty test suite.

私はしばらくこれにこだわっており、これまでオンラインで見た解決策は役に立たなかった。私のプロジェクト構造は次のように設定されています。

*メインモジュール-src * instrumentTest -Java * main -Java -manifest * build.gradle

私のbuild.gradleファイルは次のようになります。

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath 'com.Android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'Android'

repositories {
    mavenCentral()
}

Android {
compileSdkVersion 19
buildToolsVersion "19.1.0"

defaultConfig {
    minSdkVersion 16
    targetSdkVersion 19
    versionCode 1
    versionName "2.1.0"
    testPackageName "login.test"
    testInstrumentationRunner "Android.test.InstrumentationTestRunner"
}
buildTypes {
    release {
        runProguard false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-   rules.txt'
    }
}

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

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/scandit.Zip')
compile project(':pullToRefresh')
compile 'com.Android.support:appcompat-v7:19.+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1+'
compile 'org.springframework.Android:spring-Android-rest-template:1.0.1+'
compile 'org.json:json:20090211'
compile 'com.fasterxml.jackson.core:jackson-databind:2.3.1'
compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0'
compile 'com.fasterxml.jackson.core:jackson-core:2.3.1'
compile 'com.Android.support:support-v4:19.1.+'
compile 'com.mcxiaoke.volley:library:1.0.+@aar'
androidTestCompile 'junit:junit:3.8'
}

テストディレクトリ用に別のマニフェストが必要ですか?もしそうなら、それはどのように見えるでしょうか?

編集:私は運が悪かったので、instrumentTestディレクトリにマニフェストを追加しようとしました。 IntelliJにtargetPackage名を解決させることができなかったため、赤で表示されることに注意してください。

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
      package="com.employeeappv2.employeeappv2.src.instrumentTest"
      Android:versionCode="1"
      Android:versionName="1.0.0">
<application>
    <uses-library Android:name="Android.test.runner" />
</application>
<instrumentation
        Android:name="Android.test.InstrumentationTestRunner"
        Android:targetPackage="com.employeeappv2.employeeappv2.src.main"/>
</manifest>
51
Nick Thoma

したがって、主な問題は、/ src /の下にandroidTestフォルダーを作成したときに、テスト用のソースフォルダーとしてIntelliJによって選択されなかったことです(Javaサブディレクトリが緑色に変わるはずです)。私はIntelliJ 13.0.3を使用していましたが、13.1.3にアップグレードした後、私のトラブルはすべてなくなりました。

*注意:androidTestフォルダーにマニフェストを追加しようとしないでください。Gradleのドキュメントには、androidTestフォルダーを作成するときにマニフェストを自動生成する必要があると明記されています。私にとっての問題は、androidTestがIntelliJ/Gradleによって認識されなかったため、ファイルが生成されなかったため、計測エラーが発生しなかったことです。

1
Nick Thoma

Android Studio 1.1を使用しています。次の手順でこの問題を解決しました。

  1. Run - Edit Configurations - Android Tests
    計測ランナーをAndroid.test.InstrumentationTestRunnerとして指定します

  2. 次に、[ビルドバリアント]ツールウィンドウ(左側)で、テストアーティファクトをAndroid Instrumentation Testsに変更します。

Build.gradleにはtestInstrumentationRunnerは不要で、マニフェストファイルにはインスツルメンテーションタグは不要です。

25
Liuting

multiDexEnabled truebuild.gradleに追加しようとしたときに同じエラーが発生しました。

これは、... Unable to find ... ComponentInfo ...エラーメッセージで検索する際の最初のGoogleヒットの1つであるため、ここに私の経験を追加しています。

私の場合、ここでtestInstrumentationRunnerを追加するとうまくいきました。

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

(私はcom.Android.tools.build:gradle:1.5.0を持っています)

25
Peter Lamberg

新しいパッケージを作成すると、StudioはApplicationTestクラスを作成しました。 s.myname.mypackageを使用の例として、次のディレクトリ構造が作成されました。

app/[myPackage]/src/androidTest/Java/us/myname/mypackage/ApplicationTest.class

最初は、そのまま使用できました。製品フレーバーをインストールした後、動作しなくなりました。その後、build.gradleに次の変更を加えました。

defaultConfig {
   ...
   testInstrumentationRunner "Android.test.InstrumentationTestRunner"
}

一部の人が好む

testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"

(現在の構成では、...InstrumentationTestRunnerデバッグ時、およびAndroidJUnitRunnerはリリースビルドタイプの使用中です。)

上記の構成は、デバッグビルドタイプでのみ機能します。リリースまたはカスタムビルドタイプで使用する場合は、build.gradleに以下を含めることができます。

buildTypes {
     release {
         ...
     }
 debug {
     ...
 }
}
testBuildType "release"

Studioの左下にある[ビルドバリアント]タブで、Android Instrumentation Testsおよび正しいbuildTypeが選択されています。

18
VikingGlen

それが価値があるのは、通常のテストランナーを使用した後にカスタムテストランナーを作成したときにAS 2.3がハングアップしたことです。質問に投稿したのと同じエラーが表示されました。

[〜#〜] all [〜#〜] Android Instrumented Testsと再構築により、デバッグ構成を削除しました。それは修正されました。おそらくgradleを介して組み込まれているため、デバッグ構成でカスタムランナーを選択することができます。

11
LEO

VikingGlenの answer 、Liutingの answer 、および this の回答を組み合わせて行う必要がありました。この回答は、Android Studioバージョン2.1に対して有効です。

  1. 実行->構成の編集...->一般->特定のインスツルメンテーションランナー(オプション): "Android.support.test.runner.AndroidJUnitRunner"

  2. build.gradle(すべての依存関係を持つもの)、これを置きます:

    defaultConfig { testInstrumentationRunner 'Android.support.test.runner.AndroidJUnitRunner' }

次に、このタイプのテストを実行できます。

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ApplicationTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);

    @Test
    public void login() {
        //Open Drawer to click on navigation.
        onView(withId(R.id.drawer_layout))
                .check(matches(isClosed(Gravity.LEFT))) // Left Drawer should be closed.
                .perform(open()); // Open Drawer
    }
}
8
Rock Lee

これは私のプロジェクトで気づいたことです、私のapp(main)モジュールbuild.gradleでは、次のbuildType設定がありました

buildTypes {
        debug {
            multiDexEnabled true
        }

        mock {
            initWith(buildTypes.debug)
        }
    }
testBuildType "mock"

AndroidJUnitRunnerをテストランナーとして(Android Studio)から)、およびtestInstrumentationRunnerとしてbuild.gradleで使用すると、テストは滞りなく実行されました。

multiDexEnabled true as defaultConfigであったサブモジュール内

defaultConfig {
    multiDexEnabled true
    ....
}

私はの問題に遭遇しました

Test running startedTest running failed: Unable to find instrumentation info for:{mypackage.x.y/Android.support.test.runner.AndroidJUnitRunner"}

AndroidJUnitRunner in IDEおよびサブモジュールbuild.gradle。)を指定した場合、これはIDE /のテストランナーとしてMultiDexTestRunnerを指定することで修正されました。 build.gradle。

まとめると、build.gradleでmultiDexEnabled trueが指定されている場合にMultiDexTestRunnerを使用してテストを実行し、そうでない場合はテストランナーとしてAndroidJUnitRunnerを使用します。

1
Agnit

この問題が発生したため、実行->構成の編集->左上の緑色の「+」ボタン-> JUnitに移動して修正しました

そこから、「クラスパスmodを使用...」を「アプリ」に設定します(または、アプリを実行すると、実行(再生ボタン)の左側に表示されるデフォルトのアプリ名)

最後に、テストクラス名を「class:」テキストボックスに入力します。適用をクリックして大丈夫です。

この時点で、テストクラスに他のエラーがなければ、動作するはずです。

1
Daniel

すべてのユーザーのアプリがアンインストールされていることを確認してください。

設定->アプリ(すべてのアプリ)に移動します->アプリが存在する場合は、アプリをタップします->メニュー->すべてのユーザーに対してアンインストールします。

私の問題は、アプリが一時的にアンインストールされていたが、まだデバイス上にあったことでした。すべてのユーザーに対してアンインストールされなかったことを意味します。 (別の問題、解決方法がわからない。デバイスで唯一のユーザーです)

このため、アプリは再インストールされず、テストスイートには何も実行できませんでした。

1
Sababado

私の問題の解決策は、メソッド名を

@Test
public void test() {
    ...
}

@Test
public void testSomething() {
    ...
}

それが誰かを助けることを願っています。

0
Dino Tw