明らかに、この問題を解決するには正しいインポート文が必要です。 AndroidJUnit4
の ドキュメント によると、これは
import Android.support.test.runner.AndroidJUnit4;
そうすると、Android Studioはrunner
を赤でハイライトし、「シンボル 'runner'を解決できません」と文句を言います。
背景
UI Automator を使用してテストを設定するためのAndroid Developerサイトのチュートリアルに従うことで、この時点に到達しました。最初に遭遇した問題は、com.Android.support:support-v4:22.2.0
とcom.Android.support.test:runner:0.2
がcom.Android.support:support-annotations
の異なるバージョンに依存していることでした。 this Androidバグレポート からの提案に従い、プロジェクトのbuild.gradle
のallprojects
に以下を追加しました。
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
更新
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が新しく、ここのバージョン番号が非常に古い時代のものです。
テストクラスをsrc/testに置くというミスを犯しました。それらをsrc/androidTest/Java /に移動した後、依存関係は解決されました。
わかりましたので、ここにあなたと私の間違いがあります!
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)
のようなアノテーションを使用する必要があります
アプリのbuild.gradleファイルに小さな変更を加えることで問題を解決しました。 dependencies { ... }
セクションで、次の行を必ず含めてください。
debugImplementation 'com.Android.support.test:runner:1.0.1'
またはその時点で最新のバージョン(...Compile
は廃止され、...Implementation
に置き換えられています)。 注debugImplementation
の使用。 Android Studioは、androidTestImplementation
で自動インクルードすることを提案しましたが、機能しませんでした。
アプリモジュールの依存関係の下のプロジェクト構造を見て、テストからデバッグに変更する方法を見つけました。各依存関係のスコープを変更できます。以下を参照してください。
私の場合、これはリリースバリアントに役立ちました:
Android {
...
testBuildType "release"
}
まだこの問題がある場合:
シンボル「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'
このコードを依存関係に配置します
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 /に移動します。その後、依存関係が解決されます。
複数のビルドタイプのプロジェクトを使用している場合、ビルドバリアントウィンドウで選択したビルドタイプは、モジュールのbuild.gradleファイルのtestBuildTypeタグで言及する必要があります。
例:ビルドタイプdebugを使用している場合はAndroid{testBuildType "debug" }
を追加し、stageを使用している場合はAndroidタグにAndroid{testBuildType "stage"}
ステートメントを追加します。
従来のInvalidate Caches/Restartが役に立ちました! :)
追加中
compile com.Android.support.test:runner:0.5'
私にとってこの正確な問題を解決しました。
回答のリストが示すように、これにはいくつかの原因があります。リストのもう一つ:
すべての未使用のインポートを削除する熱心な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)
で発生しました。