web-dev-qa-db-ja.com

シンボル「AndroidJUnit4」を解決できません

明らかに、この問題を解決するには正しいインポート文が必要です。 AndroidJUnit4ドキュメント によると、これは

import Android.support.test.runner.AndroidJUnit4;

そうすると、Android St​​udioはrunnerを赤でハイライトし、「シンボル 'runner'を解決できません」と文句を言います。

背景

UI Automator を使用してテストを設定するためのAndroid Developerサイトのチュートリアルに従うことで、この時点に到達しました。最初に遭遇した問題は、com.Android.support:support-v4:22.2.0com.Android.support.test:runner:0.2com.Android.support:support-annotationsの異なるバージョンに依存していることでした。 this Androidバグレポート からの提案に従い、プロジェクトのbuild.gradleallprojectsに以下を追加しました。

configurations.all {
    resolutionStrategy.force 'com.Android.support:support-annotations:22.1.0'
}

これですぐにエラーが解決しましたが、現在の問題につながっていると思います。これを修正する方法についての提案はありますか?

`./gradlew:app:dependenciesからの関連セクション

androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.jayway.Android.robotium:robotium-solo:5.2.1
+--- com.squareup:fest-Android:1.0.8
|    \--- org.easytesting:fest-assert-core:2.0M10
|         \--- org.easytesting:fest-util:1.2.5
+--- com.Android.support.test:runner:0.2
|    +--- junit:junit-dep:4.10
|    |    \--- org.hamcrest:hamcrest-core:1.1
|    +--- com.Android.support.test:exposed-instrumentation-api-publish:0.2
|    \--- com.Android.support:support-annotations:22.0.0 -> 22.2.0
+--- com.Android.support.test:rules:0.2
|    \--- com.Android.support.test:runner:0.2 (*)
\--- com.Android.support.test.uiautomator:uiautomator-v18:2.1.0

compile - Classpath for compiling the main sources.
+--- com.Android.support:appcompat-v7:22.2.0
|    \--- com.Android.support:support-v4:22.2.0
|         \--- com.Android.support:support-annotations:22.2.0
+--- com.Android.support:support-v4:22.2.0 (*)
+--- com.google.Android.gms:play-services:6.1.71
|    \--- com.Android.support:support-v4:20.0.0 -> 22.2.0 (*)
+--- com.crashlytics.Android:crashlytics:1.+ -> 1.1.13
\--- com.jakewharton:butterknife:5.1.2
119
Code-Apprentice

更新

AndroidテストライブラリがAndroidXの一部になりました。 公式ドキュメント にある正しいGradle依存関係を使用してください。

元の回答

こちら 私が使用していたものよりも新しいバージョンのテストサポートライブラリがあることがわかりました。

dependencies {
    androidTestCompile 'com.Android.support.test:runner:0.5'
    androidTestCompile 'com.Android.support.test:rules:0.5'
    androidTestCompile 'com.Android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

注:これらのライブラリの最新バージョンを必ず使用してください。この質問は、Android Test Support Libraryが新しく、ここのバージョン番号が非常に古い時代のものです。

31
Code-Apprentice

アプリがデバッグビルドバリアントであることを確認してください。 ビルド>ビルドバリアントの選択...に移動すると、次のように表示されます。

enter image description here

172
orium

テストクラスをsrc/testに置くというミスを犯しました。それらをsrc/androidTest/Java /に移動した後、依存関係は解決されました。

104
mikes

わかりましたので、ここにあなたと私の間違いがあります!

Local Unit Testing のコードを書く場合は、@RunWith(AndroidJUnit4.class)を使用しないでください。AndroidJUnit4は使用しませんが、Junit4が必要です。したがって、@RunWith(JUnit4.class)と記述する必要があります。そしてもちろん、Javaテストファイルはapp/src/test/Java/your.package.nameディレクトリの下にあります。

それ以外の場合(!!)を書きたい場合 Android Instrumented Unit Test テストJavaファイルをapp/src/androidTest/Java/your.package.nameディレクトリに配置し、@RunWith(AndroidJUnit4.class)のようなアノテーションを使用する必要があります

62
Sepehr Behroozi

アプリのbuild.gradleファイルに小さな変更を加えることで問題を解決しました。 dependencies { ... }セクションで、次の行を必ず含めてください。

debugImplementation 'com.Android.support.test:runner:1.0.1'

またはその時点で最新のバージョン(...Compileは廃止され、...Implementationに置き換えられています)。 debugImplementationの使用。 Android St​​udioは、androidTestImplementationで自動インクルードすることを提案しましたが、機能しませんでした。

アプリモジュールの依存関係の下のプロジェクト構造を見て、テストからデバッグに変更する方法を見つけました。各依存関係のスコープを変更できます。以下を参照してください。

Project structure

22
stemadsen

私の場合、これはリリースバリアントに役立ちました:

Android {
    ...
    testBuildType "release" 
}
7
Andrew Glukhoff

まだこの問題がある場合:

シンボル「AndroidJUnit4」を解決できません

aPI 27を使用して、appモジュールにあるbuild.gradleに次の行を追加します。

testImplementation 'junit:junit:4.12'

// AndroidJUnitRunner and JUnit Rules
androidTestImplementation 'com.Android.support.test:runner:1.0.2'
androidTestImplementation 'com.Android.support.test:rules:1.0.2'

// Espresso dependencies
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
5
tm81

このコードを依存関係に配置します

compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.Android.support', module: 'support-annotations'
})

テストクラスをsrc/androidTest/Java /に移動します。その後、依存関係が解決されます。

1
Komal Nikhare

複数のビルドタイプのプロジェクトを使用している場合、ビルドバリアントウィンドウで選択したビルドタイプは、モジュールのbuild.gradleファイルのtestBuildTypeタグで言及する必要があります。

例:ビルドタイプdebugを使用している場合はAndroid{testBuildType "debug" }を追加し、stageを使用している場合はAndroidタグにAndroid{testBuildType "stage"}ステートメントを追加します。

1
Rahul Rastogi

従来のInvalidate Caches/Restartが役に立ちました! :)

0
user_MGU

追加中

compile com.Android.support.test:runner:0.5'

私にとってこの正確な問題を解決しました。

0
donlys

回答のリストが示すように、これにはいくつかの原因があります。リストのもう一つ:

すべての未使用のインポートを削除する熱心なLINTを実行しました。これは同じエラーを生成し、これが問題であることを見逃しがちです。

Android-studioは、テストコードにない参照を強調表示します-そして、ALT-ENTERポップアップが表示されます(これは見逃しやすいビットです)。

次に、LINTからテストを削除するか、少なくともこの警告を無効にする必要があります。

編集:@ Code-Apprentice、欠落していた行は次のとおりです。

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


import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

そのため、ファイルの最初のエラーは、テストクラスの開始時に@RunWith(AndroidJUnit4.class)で発生しました。

0
winwaed