无法解析符号AndroidJUnit4

时间:2017-04-11 10:05:17

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

我正在尝试为我的应用添加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'

8 个答案:

答案 0 :(得分:8)

尝试

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

添加以下依赖关系部分

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

答案 1 :(得分:7)

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

为了让我的SQLite功能单元经过测试,我正撞在墙上和/或我面前看到的任何物体上。无论我做什么,如何严格遵循建议,我在网上的许多聪明人都没有工作。

然后我不得不去学前班并重新开始实现我的愚蠢错误。我了解到AndroidJUnit4只能用于Instrumentation Test,而JUnit必须用于本地测试。话虽这么说,文件夹必须是 src / androidTest / java 。我的测试类直接在androidTest文件夹下,因此我不得不面对那个讨厌的错误。然而,当我把它移到 src / androidTest / java 之下的那一刻,一切都非常清楚,就像“我现在可以清楚地看到雨已经消失了”。

Take a look at this article ,其中说......

  

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

     

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

因此,对于仪器测试文件夹必须(不要忘记案例)

  

的src / androidTest / JAVA

本地测试文件夹必须

  

的src /测试/ JAVA

然后,您可以让您的包文件夹与您的应用包匹配

希望,这对社区有帮助!

答案 2 :(得分:2)

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

  1. 转到Android Studio构建/风格标签
  2. 选择您在build.gradle Gradle属性
  3. 中指定的相同构建类型
  4. 将Android Studio与Gradle同步
  5. 要再次正常运行应用程序,您显然需要切换回“调试”我想。

    注意:即使这解决了我在这里提出的问题所描述的核心问题,我仍然在寻找一种方法来支持Android测试的自定义构建类型,但也允许调试构建类型;我的最终目标是让CI运行具有特殊构建类型的测试,但让开发人员以“调试”模式运行它们。因此,如果有人知道如何实现这一点,评论部分就是你的。 :)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

注意:

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

答案 5 :(得分:0)

请尝试使用最新的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中进行同步。

答案 6 :(得分:0)

最适合我的解决方案是更改模拟器(使用您正在使用的api的模拟器) 为此,请点击“运行”按钮旁边的Emulatr符号(例如:Pixel 2) 然后进入“打开AVD管理器”(添加您需要的API(例如API 29)) 就这样

答案 7 :(得分:0)

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

1。正确导入

import androidx.test.runner.AndroidJUnit4

代替

import android.support.test.runner.AndroidJUnit4

2。正确的方法

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

代替

Context appContext = InstrumentationRegistry.getTargetContext()