【问题标题】:Cannot resolve symbol AndroidJUnit4无法解析符号 AndroidJUnit4
【发布时间】:2017-09-06 15:47:26
【问题描述】:

我正在尝试为我的应用添加 loginfacebook。但是,当我添加了执行此操作所需的存储库时。它导致了一个错误。 AndroidJUnit4 现在无法解析。

ExampleInstrumentedTest.java

package com.example.user.enyatravelbataan;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

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

import static junit.framework.Assert.assertEquals;
import static org.junit.Assert.*;

/**
 * Instrumentation test, which will execute on an Android device.
 *
 * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
    // Context of the app under test.
    Context appContext = InstrumentationRegistry.getTargetContext();

    assertEquals("com.example.user.enyatravelbataan", 
appContext.getPackageName());
}
}

这是我的构建:gradle(app)

apply plugin: 'com.android.application'

 android {
compileSdkVersion 24
buildToolsVersion "24.0.3"
useLibrary 'org.apache.http.legacy'


repositories {
    mavenCentral()
}

defaultConfig {
    applicationId "com.example.user.enyatravelbataan"
    minSdkVersion 16
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name: 'wikitudesdk', ext: 'aar')
// compile 'org.apache.httpcomponents:httpclient:4.5'
// compile 'org.apache.httpcomponents:httpcore:4.4.1'
compile files('libs/MD5Simply.jar')
compile files('libs/GenAsync.1.2.jar')
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:multidex:1.0.0'
compile 'com.google.android.gms:play-services:9.8.0'
compile 'com.google.android.gms:play-services-location:9.8.0'
compile 'com.google.android.gms:play-services-appindexing:9.8.0'
compile 'com.android.support:cardview-v7:24.2.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.android.support:design:24.2.1'
compile 'com.android.volley:volley:1.0.0'
compile 'com.android.support:support-v4:24.2.1'

testCompile 'junit:junit:4.12'
}

repositories {
flatDir {
    dirs 'libs'
}
}
apply plugin: 'com.google.gms.google-services'

【问题讨论】:

    标签: java android-studio junit4 facebook-login android-instrumentation


    【解决方案1】:

    试试

    androidTestImplementation 'com.android.support:support-annotations:23.1.0'
    androidTestImplementation 'com.android.support.test:runner:0.4.1'
    androidTestImplementation 'com.android.support.test:rules:0.4.1'
    

    添加以下依赖项部分

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

    【讨论】:

    【解决方案2】:

    除上述答案外,请确保您严格按照以下步骤操作:

    为了测试我的 SQLite 函数单元,我正用头撞墙和/或我看到的任何物体。无论我做什么,我在互联网上的许多聪明人所提供的建议多么严格地执行都行不通。

    然后我不得不去幼儿园重新认识我的愚蠢错误。我了解到 AndroidJUnit4 只能与 Instrumentation Test 一起使用,而 JUnit 必须用于本地测试。话虽如此,该文件夹必须是 src/androidTest/java。我的测试类直接在 androidTest 文件夹下,因此我不得不面对那个讨厌的错误。然而,当我将它移到 src/androidTest/java 下的那一刻,一切都变得非常清晰,就像“我现在可以清楚地看到雨停了”。

    Take a look at this article 上面写着...

    运行仪表化单元测试要运行仪表化测试,请按照 这些步骤:

    通过单击“同步”确保您的项目与 Gradle 同步 工具栏中的项目。以下列方式之一运行您的测试: 要运行单个测试,请打开“项目”窗口,然后右键单击 测试并单击运行。要测试类中的所有方法,请右键单击 测试文件中的类或方法,然后单击 Run 。在一个 目录,右键单击该目录并选择 Run tests 。这 Android Plugin for Gradle 编译位于 在默认目录 (src/androidTest/java/) 中,构建一个测试 APK 和生产 APK,在连接的设备上安装这两个 APK 或 模拟器,并运行测试。 Android Studio 然后显示结果 在“运行”窗口中执行检测的测试。

    因此各位,instrumentation test 的文件夹必须是(不要忘记大小写)

    src/androidTest/java

    对于本地测试,文件夹必须是

    src/test/java

    然后你可以让你的包文件夹匹配你的应用包

    希望,这对社区有所帮助!

    【讨论】:

      【解决方案3】:

      另一件重要的事情(对我来说已经出现了这个问题)是检查您是否更改了测试的构建类型 - 这将是您模块的build.gradle 中的testBuildType 选项。
      如果您确实更改了它(就像我一样),那么在编辑任何 Android 测试之前:

      1. 转到您的 Android Studio 构建/风味选项卡
      2. 选择您在testBuildType Gradle 属性中指定的相同构建类型
      3. 将 Android Studio 与 Gradle 同步

      要再次正常运行应用程序,我想您显然需要切换回“调试”。

      注意:尽管这解决了我的核心问题,如问题here所述,我仍在寻找一种方法来支持Android测试的自定义构建类型,但也允许调试构建类型;我的最终目标是让 CI 使用特殊的构建类型运行测试,但让开发人员在“调试”模式下运行它们。因此,如果有人对如何实现这一点有任何想法,那么 cmets 部分就是你的了。 :)

      【讨论】:

        【解决方案4】:

        如果迁移到 AndroidX 后出现此问题。这样做:-

        1。正确的导入

        import androidx.test.runner.AndroidJUnit4
        

        而不是

        import android.support.test.runner.AndroidJUnit4
        

        2。正确的方法

        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
        
        

        而不是

        Context appContext = InstrumentationRegistry.getTargetContext()
        

        【讨论】:

          【解决方案5】:

          只需将compile "com.android.support.test:runner:1.0.1" 添加到您的 Gradle。

          【讨论】:

            【解决方案6】:

            对我来说,这是因为 build.gradle 中的一些 androidTestImplementation 导入不是最新的。在我将它们 all 更新到最新版本后,错误就消失了。

            注意:

            我的项目有多个模块,我必须在每个模块中更新它们。

            【讨论】:

              【解决方案7】:

              请尝试以下最新的 API

              testImplementation 'junit:junit:4.12'
              androidTestImplementation 'com.android.support.test:runner:1.0.2'
              androidTestImplementation 'com.android.support.test.espresso:espresso-ore:3.0.2'
              

              仍然没有运气,然后尝试“实现”而不是 testImplementation、androidTestImplementation 和 androidTestImplementation 并在 Gradle 中同步。

              【讨论】:

                【解决方案8】:

                对我有用的解决方案是更改模拟器(使用您正在使用的 api 的模拟器) 为此,请单击“运行”按钮旁边的仿真器符号(例如:Pixel 2) 然后去 Open AVD Manager (添加你需要的 api (ex API 29)) 就这些

                【讨论】:

                  猜你喜欢
                  • 2015-08-16
                  • 2015-11-17
                  • 2018-11-27
                  • 2016-09-29
                  • 2018-11-11
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多