web-dev-qa-db-ja.com

Error = ComponentInfo {}のインスツルメンテーション情報が見つかりません

エスプレッソテストを立ち上げようとしていますが、このエラーが発生し続けます。

INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.mikeestrada.test/Android.test.InstrumentationTestRunner}

一度は機能しましたが、レポートを正しく再作成できません。それらは空白であり、何もテストしませんでした。私は次のようなコマンドをたくさん試しました

adb Shell am instrument -w -r com.mikeestrada.test/Android.test.InstrumentationTestRunner

そして

adb Shell am instrument -w -r   com.mikeestrada.test/com.google.Android.apps.common.testing.testrunner.GoogleInstrumentation TestRunner

コードスニペットは次のとおりです。

AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
        package="com.example.myapplication"
        Android:versionCode="1"
        Android:versionName="1.0" >

        <uses-sdk
            Android:minSdkVersion="7"
            Android:targetSdkVersion="19" />

        <application
            Android:allowBackup="true"
            Android:icon="@drawable/ic_launcher"
            Android:label="@string/app_name"
            Android:theme="@style/AppTheme" >
            <activity
                Android:name="com.example.myapplication.MainActivity"
                Android:label="@string/app_name" >
                <intent-filter>
                    <action Android:name="Android.intent.action.MAIN" />

                    <category Android:name="Android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
                <instrumentationandroid:name="com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"                   
    Android:targetPackage="com.mikeestrada.test"/>

TestStartScreen.Java

    package com.mikeestrada.test;

    import Android.test.ActivityInstrumentationTestCase2;
    import Android.test.ActivityUnitTestCase;
    import Android.test.AndroidTestCase;
    import Android.test.suitebuilder.annotation.LargeTest;
    import Android.view.View;

    import com.example.myapplication.MainActivity;
    import com.example.myapplication.R;
    import com.google.Android.apps.common.testing.ui.espresso.Espresso;
    import com.google.Android.apps.common.testing.ui.espresso.ViewAssertion;
    import com.google.Android.apps.common.testing.ui.espresso.ViewInteraction;
    import com.google.Android.apps.common.testing.ui.espresso.action.ViewActions;
    import com.google.Android.apps.common.testing.ui.espresso.assertion.ViewAssertions;
    import com.google.Android.apps.common.testing.ui.espresso.matcher.ViewMatchers;

    import junit.framework.Assert;
    import org.hamcrest.Matcher;


    public class TestStartScreen extends ActivityInstrumentationTestCase2<MainActivity> {

        public TestStartScreen() {
            super(MainActivity.class);
        }

        @LargeTest
        public void testHelloWorld(final Matcher<View> viewMatcher) {
            // Find
            //ViewInteraction button1 = onView(ViewMatchers.withId(R.id.button1)); // Find the button
            ViewInteraction helloWorldText = Espresso.onView(ViewMatchers.withText("Hello world!")); // Find the text

            // Action
            //button1.perform(ViewActions.click()); // Click the button
            helloWorldText.perform(ViewActions.typeText("Bye World!"));
            Espresso.onView(ViewMatchers.withText(R.id.withText));

            // Check
            helloWorldText.check(ViewAssertions.matches((ViewMatchers.isDisplayed())));  // Hello world text is hidden

            //Espresso.onView(withId(R.id.my_view)).check(matches(withText("Hello  world!")));
        }
    }

build.gradle

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

repositories {
    mavenCentral()
}

Android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 19
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            assets.srcDirs = ['assets']
        }
    }
}

dependencies {
    compile 'com.Android.support:appcompat-v7:+'
    instrumentTestCompile files('libs/espresso-1.1-bundled.jar')
}
Android {
    defaultConfig {
        testInstrumentationRunner     "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }
}
task wrapper (type: Wrapper) {
    gradlerVersion = '1.9'
}

それが何かを意味する場合-マニフェスト内の<instrumentation>の属性は、IntelliJがそれらを認識しないかのように赤色で表示されます。

どんな助けも素晴らしいです、ありがとう!

35
mikeestrada67

デバイスにインストールされているインストルメンテーションパッケージを確認する必要があります。

 adb Shell pm list instrumentation

次に、com.mikeestrada.testが実際にリストされているかどうかを確認します。

76
IgorGanapolsky

Build.gradleファイルを見ると、実際の問題はdefaultConfigセクションに次の構成がないことです。

testInstrumentationRunner "com.google.Android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"

Espressoを使用するには、GoogleInstrumentationTestRunnerが必要です。

また、gradleビルドシステムでは、テストプロジェクトが自動生成されるため、AndroidManifest.xmlは必要ありません。

6
Marc Thomas

上記の回答から、インストルメンテーションパッケージが見つからない場合は、次のコマンドでインストールします。

$ gradle :{$project}:installDebugAndroidTest

gradle task showing location of installDebugAndroidTest

4
korosmatick

また、アプリパッケージはcom.mikeestrada。そのため、AndroidManifestではAndroid:targetPackage なので Android:targetPackage="com.mikeestrada"

これが役立つことを願っています。

0
paynd

問題は、スペースが不足していることです:

instrumentationandroid:name

あるべき

instrumentation Android:name
0
Omar Madbouli