Android Studio 无法解决 org.junit。

34

我正在使用Android Studio 1.2.2中的JUnit测试。 测试可以正常运行。 唯一让我感到困惑的是,Android Studio无法解析实际的org.junit软件包。 显然,否则测试不会运行。 但是,在Android Studio中,导入和注释被标记为红色,如此处所示。 这是Android Studio的错误吗? 我尝试重建应用程序并重新启动Android Studio,但这并没有解决问题。

import org.junit.Test;

import static org.junit.Assert.*; // cannot resolve symbol 'junit'

public class CanadaTest
{
    @Test
    public void testCountryName() throws Exception
    {
        int x = 0;
        x++;
    }
}

请发布您的 build.gradle 文件。 - Jared Burrows
9个回答

39

尝试使用 文件 -> 无效缓存 / 重启


1
在 build-variants 中,你的测试构件是“单元测试”吗? - ligi
是的。如前所述,一切都已正确配置并且测试已运行。如果某些设置不正确,测试将无法运行,并且AS会报错。 - Johann
5
尝试“使缓存无效并重新启动”。 - ligi
1
最短的答案。 - Jared Burrows

20

将以下内容添加到你的gradle文件中:

 testCompile 'junit:junit:4.12'

7
你应该将那部分放在testCompile中用于单元测试。使用androidTestCompile 进行仪器化测试。 - Jared Burrows
嗯,我只是想试一试。 - rupesh jain
@JaredBurrows 那应该就是答案了。解决了我的错误。谢谢。 - Joakim
2
testCompile现已过时,对于较新的项目,可以使用以下内容:"Configuration 'testCompile'已过时,已被'testImplementation'和'testApi'所取代。" - T0plomj3r
使用testImplementation 'junit:junit:4.12'替代testCompile,因为testCompile已经过时。 - Spikatrix

15
如果以上方法都不行,可能是因为你的测试类放在了错误的目录中。
我遇到了这个问题,因为我的测试类放在了/main/java目录下,而不是应该放在/test目录下...
简而言之,确保你的测试类放在/test目录中!

1
谢谢,你真的救了我的一天,因为我错误地把它放在了单元测试目录中。 - Irfan Ul Haq

6
我曾经遇到过这个问题,后来发现是因为我的生成变量设置成了“发布(release)”模式。一旦我把它改回“调试(debug)”模式,Android Studio 就会对代码进行构建,等构建完成后,junit注释上的红色错误就会消失。 这是 Android Studio 中的生成变量设置截图。

这对我来说也有用,而且它有点说得通。有更多构建经验的人可以解释为什么吗? - Babao
抱歉现在才回复您的请求解释。原因与Gradle处理范围的方式有关。它有一个更大的范围,包括测试,并且有一个更小的范围,不包括测试,只构建用于部署的应用程序。当您在Android Studio中选择调试时,它使用包括测试的较大范围。当您在Android Studio中选择发布时,它使用排除测试的较小Gradle范围。如果您选择了发布选项,则似乎会对JUnit内容感到困惑,因为它未在该范围内定义。 - user3064141
@user3064141 你救了我的一天!!我有一个只包含 Kotlin 的模块作为项目的库模块。我已经为库模块设置了 junit5 依赖,但在同步 gradle 配置时无法解析这些依赖项。结果发现我在“Build variant”部分选择了项目的“release”构建变体。我为此苦恼了两天哈哈。 - Harry Luu

2
我通过结合一些答案和一些更改来解决了这个问题:
1. 确保设置了 prepare 的 targetSdkVersion、compileSdkVersion 和 buildToolsVersion。
2. 我使用了最新的 Android Gradle Plugin 版本和 Gradle 版本。
3. 在应用程序级别的 build.gradle 中添加了一些行(我用“\*”标记它们):
    apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"

    defaultConfig {
        applicationId "com.zima.testapp"
        minSdkVersion 22
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"   //*
        apply plugin: 'maven'   //*
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    dependencies {
        testImplementation 'junit:junit:4.12'  //*
        implementation 'junit:junit:4.12'   //*
        androidTestImplementation 'com.android.support:support-annotations:28.0.0'  //*
        androidTestImplementation 'com.android.support.test:runner:1.0.2'  //*
        androidTestImplementation 'com.android.support.test:rules:1.0.2'  //*
        implementation fileTree(dir: 'libs', include: ['*.jar'])   //*
        implementation fileTree(dir: 'libs', include: 'Parse-*.jar')   //*
    }
}

项目级别的build.gradle如下:

    buildscript {
     repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        apply plugin: 'java'  //*
         }
}
allprojects {
    repositories {
        jcenter()
        google()
        maven {
            url "https://jitpack.io"
        }
    }
}

1

问题
在仪器测试(androidTest)中未找到org.junit.*的类和注释。这些类在junit测试(test)中被找到。

解决方案
Build VariantRelease切换到Debug


谢谢兄弟,我欠你一个人情! - Jeje Doudou

1
也许在您的gradle文件中有类似以下内容的代码:
configurations {
    debugImplementation.exclude group: "junit", module: "junit"
}

移除后一切都会正常工作。


0
如果您重新安装了Android Studio,请记住默认情况下它不会使用您系统中的JDK(项目结构 -> SDK位置 -> JDK位置)。

0

junit更改为最新版本

testImplementation 'junit:junit:'

为了

testImplementation 'junit:junit:4.13.2'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接