显然我需要正确的导入语句来解决这个问题。根据{{3}},这应该是
import android.support.test.runner.AndroidJUnit4;
当我这样做时,Android Studio以红色突出显示runner
并投诉"无法解析符号' runner'"。
背景
我按照Android开发人员网站上docs for AndroidJUnit4
的教程了解了这一点。我遇到的第一个问题是com.android.support:support-v4:22.2.0
和com.android.support.test:runner:0.2
依赖于com.android.support:support-annotations
的不同版本。我按照setting up tests using UI Automator中的建议进行了操作,并将以下内容添加到我的项目allprojects
中的build.gradle
:
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
答案 0 :(得分:171)
答案 1 :(得分:102)
我犯了错误,将测试类放在 src / test 。将它们移动到 src / androidTest / java / 之后,依赖关系就解决了。
答案 2 :(得分:62)
好的,这是你的错误,我的!
如果我们要为Local Unit Testing编写一些代码,我们就不应该使用@RunWith(AndroidJUnit4.class)
因为我们不使用AndroidJUnit4,但我们需要Junit4。所以我们应该写 @RunWith(JUnit4.class)
。当然,您的java测试文件位于app/src/test/java/your.package.name
目录下。
否则if(!!)我们想写一些Android Instrumented Unit Test我们应该将我们的测试java文件放在app/src/androidTest/java/your.package.name
目录中并使用注释@RunWith(AndroidJUnit4.class)
答案 3 :(得分:30)
<强>更新强>
Android Test Library现在是AndroidX的一部分。请务必使用official documentation中找到的正确Gradle依赖项。
原始答案
我发现here测试支持库的版本比我使用的版本更新:
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测试支持库是新的,这里的版本号已经过时了。
答案 4 :(得分:22)
我通过在app的build.gradle文件中进行一些小改动来解决问题。在dependencies { ... }
部分中,请确保包含以下行:
debugImplementation 'com.android.support.test:runner:1.0.1'
或此时最新的版本(...Compile
已弃用且已被...Implementation
替换)。 注意使用debugImplementation
。 Android Studio建议使用androidTestImplementation
自动包含它,但无效。
我通过查看app模块的Dependencies下的Project Structure,找到了如何将它从测试更改为调试,您可以在其中更改每个依赖项的范围,请参阅下文。
答案 5 :(得分:8)
此问题的常见原因是在添加以下依赖项时:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
如果您要使用检测测试(androidTest
Java程序包中的测试),则这是正确的依赖项
但是要在使用上述依赖项的同时实现本地单元测试(test
java包中的测试);那么您将面对Cannot resolve symbol 'AndroidJUnit4'
这是因为androidTestImplementation
指令用于在已测试的测试中导入库,而不是在本地JVM /单元测试中导入库。
如果要在本地JVM /单元测试中使用AndroidJUnit4
,请改用以下依赖项
testImplementation 'androidx.test.ext:junit:1.1.1'
如果在工具化测试中使用AndroidJUnit4
时添加后一个依赖项,同样的事情也适用,您也会得到Cannot resolve symbol 'AndroidJUnit4'
;因为您使用了错误的指令。
答案 6 :(得分:7)
就我而言,这有助于发布变体:
android {
...
testBuildType "release"
}
答案 7 :(得分:5)
请注意,此OP现已发布于2019年,已有4年的历史了,因此如果您使用的是Android X,则不推荐使用AndroidJUnit4.class
,则该位置有一个错误,另外一个与此androidx.test.ext.junit.runners.AndroidJUnit4
相关的错误。我建议阅读此链接以解决问题。
AndroidJUnit4.class is deprecated: How to use androidx.test.ext.junit.runners.AndroidJUnit4?
Migrating Junit4 tests to androidx: What causes 'delegate runner could not be loaded'? 对我来说,Android Studio建议替换
@RunWith(AndroidJUnit4.class)
已被
弃用@RunWith(AndroidJUnit4ClassRunner.class)
还有这个
androidx.test.ext.junit.runners.AndroidJUnit4
与此
import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner;
此后错误消失了,但是我不知道将来运行时是否可以正常运行?!
答案 8 :(得分:4)
如果还有人遇到此问题:
无法解析符号'AndroidJUnit4'
并使用API 27,在应用模块中的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'
答案 9 :(得分:3)
将此代码放入您的依赖项
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'
})
答案 10 :(得分:1)
如果您正在使用具有多个构建类型的项目,那么必须在模块的build.gradle文件中的testBuildType标记中提及在构建变量窗口中选择的构建类型。
例如:如果您使用的是构建类型 debug ,则应添加android{testBuildType "debug" }
,如果使用 stage ,则应在其中添加android{testBuildType "stage"}
语句android标签。
答案 11 :(得分:1)
将测试类移至src / androidTest / java /。然后依赖性将解决。
答案 12 :(得分:0)
确保您拥有
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
您的应用程序build.gradle文件中的依赖项。我误删了它,测试停止了。
答案 13 :(得分:0)
当我遵循Google IOSched应用程序并使用三种构建类型[debug,release,staging]设置项目时,发生了相同的错误,其中debug和release共享相同的源目录
sourceSets {
debug.java.srcDir 'src/debugRelease/java'
release.java.srcDir 'src/debugRelease/java'
}
在这种情况下,请在模块级build.gradle文件中指定testBuildType
,该项目现在应该能够解析符号“ AndroidJUnit4”。
...
sourceSets {
debug.java.srcDir 'src/debugRelease/java'
release.java.srcDir 'src/debugRelease/java'
}
testBuildType "staging"
...
参考:https://github.com/google/iosched/blob/master/mobile/build.gradle
答案 14 :(得分:0)
短篇小说版本:
将Gradle升级到最新版本
我要在2020年2月15日回答这个问题。 不幸的是,我已经用尽了这里和其他地方提到的所有可能的解决方案。
https://github.com/codepath/android_guides/wiki/UI-Testing-with-Espresso
https://github.com/udacity/AdvancedAndroid_TeaTime/issues/14
Android Espresso : cannot resolve symbol AndroidJUnit4.class
Android Espresso : cannot resolve symbol AndroidJUnit4.class
是的,以上方法均无效。我使用内置功能“迁移到Andoridx”,这可能提醒我必须升级目标SDK版本和gradle版本。我将gradle版本从2.0.2升级到3.5.3之后。它们只是起作用,即使旧的import语句也起作用。
答案 15 :(得分:0)
在您的build.gradle文件中添加此依赖项:
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
使用已发布的最新版本更新最终版本(1.1.1
)。
答案 16 :(得分:0)
经典的无效缓存/重新启动对我有所帮助! :)
答案 17 :(得分:0)
正如答案列表所示,这可能是由一些原因引起的。列表中还有一个:
我运行了一个过分热心的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)
。
答案 18 :(得分:0)
添加
compile com.android.support.test:runner:0.5'
为我解决了这个问题。