69

显然我需要正确的导入语句来解决这个问题。按照docs for AndroidJUnit4,这应该是无法解析符号'AndroidJUnit4'

import android.support.test.runner.AndroidJUnit4; 

当我做到这一点,Android的工作室红色突出runner并抱怨“无法解析符号‘选手’”。

背景

我按照在Android开发者网站上的教程setting up tests using UI Automator了这一点。我遇到的第一个问题是com.android.support:support-v4:22.2.0com.android.support.test:runner:0.2取决于不同版本的com.android.support:support-annotations。我跟着从this Android bug report的建议,并在我的项目的build.gradle添加以下到allprojects

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

这解决了眼前的错误,但我怀疑它导致我现在的问题。有没有人有任何关于如何解决这个问题的建议?应用:

从`./gradlew培训相关部分依赖

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

这表明你的构建缺少'com.android.support.test:runner'顾左右而言他。你能通过'gradle dependencies'确认你在'resolutionStrategy'改变后仍然把它拉进去吗? – CommonsWare

+0

@CommonsWare添加依赖关系输出到我的问题。我不知道在'com.android.support.test:runner:0.2'之后'(*)'的含义。 –

+0

根据[Gradle伙计](https://discuss.gradle.org/t/what-is-the-asterisk-in-dependencyreport/6067/3),星号“表示依赖图的树视图在这一点上被缩短了,因为图表的那部分已经在前面列出了。“我很难理解为什么这不适合你。 – CommonsWare

回答

14

我发现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' 
} 
+2

现在亚军更新为0.4 – herbertD

+15

aaaand,仍然不起作用 – Karoly

65

我犯了错误,将测试类放在src/test。在将它们移动到src/androidTest/java/之后,依赖项已解决。

+0

在我的情况下,我的测试文件夹是由于某种原因src/test,然后我不得不重新命名为src/androidTest,它解决了我的问题,3小时后... –

47

好的,这是你的错误和我的!

如果我们要为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)

+0

非常感谢好友,它为我工作 – Zia

+0

这工作非常感谢。 –

+0

我正在使用Maven,那么呢? – JohnyTex

106

确保您在调试版本变种程序。转到构建>选择构建变量...及以下应该显示:

enter image description here

+2

谢谢,你救了我 – Sofa

+2

祝福你。文档从未声明“这个东西只能在调试中工作”。太令人沮丧了。 –

+10

哇。投票x 100万。这是我一直在寻找好几天的答案。也找到了这个,所以你可以改变使用哪种构建类型。 'android {testBuildType“staging”}' – WIllJBD

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' 
}) 
+1

当我写这个问题时,我还没有添加意式咖啡作为单元测试的依赖。 –

+0

+1我在看到这个之前就已经明白了,但是,这就是我所做的,它解决了我的问题。 –

+2

按照@sepehr下面的两个答案。 AndroidJunit4类不包含在espresso包中,而是包含在android.support.test.runner包中。并且你所要做的就是包含@Runwith(AndroidJunit4.class)写在src/Androidtest/java中的测试用例的上面/ INSTED OF中,包括在src/test/java下编写的测试用例。 – Khay

1

我有同样的问题,要解决它在应用程序的build.gradle文件中做出一些小改动。在dependencies { ... }部分,确保包括以下行:

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

或任何版本是在这一点上最新的(...Compile已被弃用,由...Implementation已取代)。 备注使用debugImplementation。 Android Studio建议使用androidTestImplementation自动将其包含在内,但无效。

我发现如何将它从测试中更改为调试项目结构下的应用程序模块的依赖项,您可以更改每个依赖项的范围,请参见下文。

Project structure

0

在我而言这有助于释放的变体:

android { 
    ... 
    testBuildType "release" 
} 
+0

您可以提供更完整的解决方案吗?我不明白你所做的事情。 –

+0

当我将构建变体更改为“发布”时,遇到了“无法解析符号'AndroidJUnit4'”问题。只要我将此语句(testBuildType“release”)添加到应用程序级别的build.gradle(取自https://developer.android.com/studio/test/index.html#add_a_new_test) 此问题消失。 –

+0

我在答案中将你的答案格式化了。您应该添加更多详细信息,例如评论中的链接,并描述此块在您的项目中的位置。 –