web-dev-qa-db-ja.com

Android Espresso:シンボルAndroidJUnit4.classを解決できません

新しいAndroidプロジェクト内にEspresso UIテストを作成しようとしていますが、次の問題に直面しました。

空のテストクラスを作成しようとした場合:

import Android.content.Intent;
import Android.support.test.rule.ActivityTestRule;
import Android.support.test.runner.AndroidJUnit4;
import Android.test.ActivityInstrumentationTestCase2;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static Android.support.test.espresso.Espresso.onView;
import static Android.support.test.espresso.assertion.ViewAssertions.matches;
import static Android.support.test.espresso.matcher.ViewMatchers.withId;
import static Android.support.test.espresso.matcher.ViewMatchers.withText;


@RunWith(AndroidJUnit4.class)
public class LoginActivityTest extends ActivityInstrumentationTestCase2<LoginActivity> {

}

常にこのエラーメッセージが表示されます。

cannot resolve symbol AndroidJUnit4.class

また、インポートされたライブラリのほとんどが未使用としてマークされます。

build.gradleファイルには以下が含まれています。

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.some.thing.xxx"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
    packagingOptions {
        exclude 'LICENSE.txt'
    }
}

repositories {
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    maven { url "https://jitpack.io" }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:appcompat-v7:23.0.0'
    compile 'com.google.Android.gms:play-services:7.8.0'
    compile 'com.mcxiaoke.volley:library:1.0.18'
    compile 'com.orhanobut:logger:1.11'
    // App dependencies
    compile 'com.Android.support:support-annotations:23.0.0'
    // TESTING DEPENDENCIES
    androidTestCompile 'com.Android.support.test:runner:0.3'
    // Set this dependency to use JUnit 4 rules
    androidTestCompile 'com.Android.support.test:rules:0.3'
    // Set this dependency to build and run Espresso tests
    androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2'
    // add this for intent mocking support
    androidTestCompile 'com.Android.support.test.espresso:espresso-intents:2.2'
    // add this for webview testing support
    androidTestCompile 'com.Android.support.test.espresso:espresso-web:2.2'
    // Set this dependency to build and run UI Automator tests
    androidTestCompile 'com.Android.support.test.uiautomator:uiautomator-v18:2.1.1'
    androidTestCompile 'com.Android.support.test.espresso:espresso-contrib:2.2'
}

これらの設定を他のテストプロジェクトに適用すると動作するので、何が間違っているのかわかりませんか?

私はこのチュートリアルに従っています:」

http://www.vogella.com/tutorials/AndroidTestingEspresso/article.html

そして、SO質問: シンボル 'AndroidJUnit4'を解決できません =で解決しようとしました。

しかし、運がなければ。

アドバイスをありがとう。

18
redrom

私もvogellaから同じチュートリアルを試してみましたが、多くの問題に遭遇しました。私が最初に遭遇した問題の1つは、v23ライブラリの注釈バージョンとEspressoライブラリの依存関係の衝突でした。

その後、Roger Huの別の最近更新されたチュートリアル「 EspressoによるUIテスト 」を見つけました。エスプレッソはまだマシュマロをサポートしていないという発言に気付きました。

依存関係は次のように追加されました。

androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2') {
    // Necessary if your app targets Marshmallow (since Espresso
    // hasn't moved to Marshmallow yet)
    exclude group: 'com.Android.support', module: 'support-annotations'
}
androidTestCompile('com.Android.support.test:runner:0.3') {
    // Necessary if your app targets Marshmallow (since the test runner
    // hasn't moved to Marshmallow yet)
    exclude group: 'com.Android.support', module: 'support-annotations'
}

これにより、依存関係の競合が解決され、残りの問題が発生することはありませんでした。

14
passerby

以下を手動でインポートすることで解決しました。自動的にインポートする必要があると思いましたが、そうではありませんでした。

import static Android.support.test.espresso.Espresso.onView;
import static Android.support.test.espresso.action.ViewActions.click;
import static Android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static Android.support.test.espresso.action.ViewActions.typeText;
import static Android.support.test.espresso.assertion.ViewAssertions.matches;
import static Android.support.test.espresso.matcher.ViewMatchers.withId;
import static Android.support.test.espresso.matcher.ViewMatchers.withText;
9
yehyatt

与えられた上記のgradleの変更によると:

androidTestCompile 'com.Android.support.test:runner:0.3'

に変更する必要があります

androidTestCompile('com.Android.support.test:runner:0.3') {
    exclude group: 'com.Android.support', module: 'support-annotations'
}

私にとっては、上記の変更でも機能していなかったので、気づいたのは以下のインクルージョンが欠落していることでした:

androidTestCompile 'com.Android.support.test.uiautomator:uiautomator-v18:2.1.1'

それは私にとってはうまくいきました。

完全なbuild.gradleは次のように見つかります。

    apply plugin: 'com.Android.application'

    Android {
    compileSdkVersion 23
    buildToolsVersion "21.1.2"

    lintOptions {
        // IMPORTANT: We are disabling this rule to avoid build errors on PrettyTime. Although
        //pretty time references an InvalidPackage it does not do it in the code sections we use
        //given how easy this library is to use I would prefer not to replace it with something
        //like Joda-Time which is overkill for such a small section of the app.
        disable 'InvalidPackage'
    }

    packagingOptions {
        exclude 'LICENSE.txt'
    }

    defaultConfig {
        applicationId "co.test.dialer"
        minSdkVersion 18
        targetSdkVersion 22
        versionCode 15
        versionName "0.6.15."
        renderscriptTargetApi 22
        renderscriptSupportModeEnabled true
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        production {
            storeFile file("keystore.jks")
            storePassword "hello"
            keyAlias "production"
            keyPassword "Android"
        }

        debug {
            storeFile file("keystore.jks")
            storePassword "hello"
            keyAlias "debug"
            keyPassword "Android"
        }

    }

    buildTypes {

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.production
        }

        debug {
            minifyEnabled false
            debuggable true
            applicationIdSuffix ".debug"
            signingConfig signingConfigs.debug
        }

        internal_test {
            minifyEnabled false
            debuggable true
            applicationIdSuffix ".test"
            signingConfig signingConfigs.debug
        }
    }
}

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'com.Android.support:appcompat-v7:23.0.1'
    compile 'com.Android.support:support-v13:23.0.1'
    compile 'com.Android.support:cardview-v7:23.0.1'
    compile 'com.Android.support:design:23.0.1'
    compile 'com.Android.support:recyclerview-v7:23.0.1'
    compile 'com.google.Android.gms:play-services-gcm:8.1.0'
    compile 'com.jakewharton:butterknife:6.1.0'
    compile 'com.afollestad:material-dialogs:0.7.8.0'
    compile 'com.googlecode.libphonenumber:libphonenumber:3.1'
    compile 'com.mcxiaoke.volley:library:1.0.15'
    compile 'squizbit.com.jsonobjectified:jetjson:1.0.3@aar'
    compile 'com.google.Android.gms:play-services-analytics:8.1.0'

    releaseCompile 'co.test.dialersdk:dialersdk:1.0.8@aar';
    debugCompile 'co.test.dialersdk:dialersdk-debug:1.0.8@aar';    
    internal_testCompile 'co.test.dialersdk:dialersdk-internal_test:1.0.8@aar';

    androidTestCompile('com.Android.support.test:runner:0.3') {
        exclude group: 'com.Android.support', module: 'support-annotations'
    }
    androidTestCompile('com.Android.support.test:rules:0.3') {
        exclude group: 'com.Android.support', module: 'support-annotations'
    }
    androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2') {
        exclude group: 'com.Android.support', module: 'support-annotations'
    }
    androidTestCompile('com.Android.support.test.espresso:espresso-intents:2.2') {
        exclude group: 'com.Android.support', module: 'support-annotations'
    }
    androidTestCompile('com.Android.support.test.espresso:espresso-contrib:2.2') {
        exclude group: 'com.Android.support', module: 'support-annotations'
        exclude group: 'com.Android.support', module: 'appcompat'
        exclude group: 'com.Android.support', module: 'support-v4'
        exclude module: 'recyclerview-v7'
    }
    androidTestCompile('com.Android.support.test.espresso:espresso-web:2.2') {
        exclude group: 'com.Android.support', module: 'support-annotations'
    }

    androidTestCompile 'com.Android.support.test.uiautomator:uiautomator-v18:2.1.1'


}

これがvogellaチュートリアルの完全な手順を実行した後でも修正に半日苦労しているので、これが確実に誰かを助けることを願っています。

5
Hiten Bahri

定数を変更して解決しました

minSdkVersion 

build.gradleファイルのバージョン18に。

次のgradle.fileが機能しています:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.something.xxx"
        minSdkVersion 18
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
    packagingOptions {
        exclude 'LICENSE.txt'
    }
}

repositories {
    mavenCentral()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    maven { url "https://jitpack.io" }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:appcompat-v7:23.0.0'
    compile 'com.google.Android.gms:play-services:7.8.0'
    compile 'com.mcxiaoke.volley:library:1.0.18'
    compile 'com.orhanobut:logger:1.11'

    // TESTING DEPENDENCIES
    androidTestCompile 'com.Android.support:support-annotations:23.0.0'
    androidTestCompile 'com.Android.support.test:runner:0.3'
    // Set this dependency to use JUnit 4 rules
    androidTestCompile 'com.Android.support.test:rules:0.3'
    // Set this dependency to build and run Espresso tests
    androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2'
    // add this for intent mocking support
    androidTestCompile 'com.Android.support.test.espresso:espresso-intents:2.2'
    // add this for webview testing support
    androidTestCompile 'com.Android.support.test.espresso:espresso-web:2.2'
    // Set this dependency to build and run UI Automator tests
    androidTestCompile 'com.Android.support.test.uiautomator:uiautomator-v18:2.1.1'
    androidTestCompile 'com.Android.support.test.espresso:espresso-contrib:2.2'
}
5
redrom

このエラーメッセージが表示される理由は、テストが存在するフォルダーが仕様と一致していないためです。フォルダーはsrc/androidTest/Javaでなければなりません。

この記事を見てくださいこれは...

インストルメント済みユニットテストの実行インストルメント済みテストを実行するには、次の手順に従います。

ツールバーの「プロジェクトを同期」をクリックして、プロジェクトがGradleと同期されていることを確認してください。次のいずれかの方法でテストを実行します。1つのテストを実行するには、プロジェクトウィンドウを開き、テストを右クリックして[実行]をクリックします。クラス内のすべてのメソッドをテストするには、テストファイル内のクラスまたはメソッドを右クリックし、[実行]をクリックします。ディレクトリ内のすべてのテストを実行するには、ディレクトリを右クリックして[テストの実行]を選択します。 Android Plugin for Gradleは、デフォルトのディレクトリ(src/androidTest/Java /)にあるインストルメント済みテストコードをコンパイルし、テストAPKと製品版APKをビルドし、接続されたデバイスまたはエミュレーターに両方のAPKをインストールします、テストを実行します。Android Studioは、[実行]ウィンドウにインストルメント化されたテスト実行の結果を表示します。

したがって、instrumentation testの場合、フォルダーは(大文字と小文字を忘れないでください)でなければなりません

src/androidTest/Java

また、ローカルテストの場合、フォルダはでなければなりません

src/test/Java

その後、アプリパッケージに一致するパッケージフォルダーを作成できます。

これがコミュニティに役立つことを願っています!

4
Vincy

同じ問題が発生し、ビルドバリアントの変更を解決しました。リリースビルドでテストを実行していました。

「デバッグ」に変更したとき、動作します

おそらく、複数のビルドタイプがあります。デフォルトAndroid Projectは2つのビルドタイプ(デバッグ/リリース)を作成し、ビルドバリアントを変更して以下のようにデバッグまたは値を設定します。

http://tools.Android.com/tech-docs/new-build-system/user-guide#TOC-Testing

Currently only one Build Type is tested. By default it is the debug Build Type, but this can be reconfigured with:
Android {
    ...
    testBuildType "staging"
}
2
Sam

これを参照できます answer

「テストクラスをsrc/testに置くのを間違えました。src/ androidTest/Java/...に移動した後、依存関係は解決されました。これもあなたの問題かもしれません。」

1
Swapnil