未解决的引用:junit。

21

我正在使用Kotlin和LibGDX框架编写游戏。我对测试很陌生。我已经完成了一些基本的教程,学会了如何创建简单的测试以及如何配置gradle。我只需点击类并选择创建测试。

但是,当我尝试构建项目时,出现了一个错误:

e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (1, 12): Unresolved reference: junit
e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (2, 12): Unresolved reference: junit
e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (6, 6): Unresolved reference: Test
e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (8, 9): Unresolved reference: Assertions
e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (11, 6): Unresolved reference: Test
e: /Users/maximternovtsi/bagel/core/src/test/test/BagelTest.kt: (13, 9): Unresolved reference: Assertions

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':core:compileKotlin'.

BagelTest看起来像这样:

import org.junit.jupiter.api.Test

import org.junit.jupiter.api.BeforeEach


internal class BagelTest {


    @BeforeEach
    internal fun setUp() {
    }

    @Test
    internal fun passes() {
        assert(true)
    }
}

我猜 Gradle 没有找到 JUnit,但是我遵循了所有的指示。也许我错过了什么。

   buildscript {
    repositories {

        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'org.multi-os-engine:moe-gradle:1.4.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.51"
    }
}

allprojects {
    apply plugin: "eclipse"
    apply plugin: "idea"

    version = '1.0'
    ext {
        appName = "Bagel"
        gdxVersion = '1.9.8'
        junitJupiterVersion  = '5.0.2'
    }

    repositories {
        mavenLocal()
        mavenCentral()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
        maven { url "https://oss.sonatype.org/content/repositories/releases/" }
    }
}

project(":desktop") {
    apply plugin: "kotlin"

    dependencies {
        compile project(":core")
        compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
        compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop"
        compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
    }
}

project(":android") {
    apply plugin: "android"
    apply plugin: "kotlin-android"

    configurations { natives }

    dependencies {
        compile project(":core")
        compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51"
        compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86_64"
        compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-armeabi-v7a"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-arm64-v8a"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86"
        natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-x86_64"
        compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-arm64-v8a"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
        natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64"
    }
}

project(":core") {
    apply plugin: "kotlin"

    /*kotlin {
        experimental {
            coroutines 'enable'
        }
    }*/

    sourceSets.test.java.srcDirs = ["/test"]

    dependencies {
        compile "com.badlogicgames.gdx:gdx:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
        compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51"
        compile "com.badlogicgames.ashley:ashley:1.7.3"

        testCompile("org.junit.jupiter:junit-jupiter-api:${junitJupiterVersion}")
//        testCompile "org.mockito:mockito-core:2.2.7"
    }
}

tasks.eclipse.doLast {
    delete ".project"
}

你确定 Gradle 确实已经下载了 JUnit 吗?尝试在命令行中运行 ./gradlew --refresh-dependencies 告诉它重新检查这些依赖项。 - John
1
你尝试把 BagelTest.kt 放在 /core/src/test/kotlin/ 目录下了吗? - JK Ly
确保你的测试文件夹在项目的主文件夹中。 - Bolling
我正在使用Android Studio 4.0版本,并且在android项目中已经有了(test)包,这是一个默认的包,我把我的kotlin测试文件放在那里,没有任何问题。我还没有运行这个文件,但是junit等方面没有导入错误。希望这对你有所帮助。 - AdiAtAnd
6个回答

9

我通过以下步骤为libGdx+kotlin配置了junit测试:

  1. Create 'test' folder in the core project folder - it will be the root folder for test code files: [project-root]/core/test

  2. Add junit dependencies in project main gradle.build file to the project(":core") section:

    project(":core") {
      ....
      dependencies {
        ...
        testCompile 'junit:junit:4.12'
        testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlinVersion"
       }
     }
    
  3. Add test source set in [project-root]/core/build.gradle file, right under the 'sourceSets.main.java.srcDirs = [ "src/" ]' line:

    sourceSets.test.java.srcDirs = ["test/"]
    
  4. Now the [project-root]/core/test folder will be highlighted with green, which means that this folder is recognized as test source directory. Now you can place there a .kt file with simple junut test, for example:

    import org.junit.Test
    import kotlin.test.assertEquals
    
    class SimpleTest{
    
        @Test
        fun testEquals(){
            var b=true
            assertEquals(true,b)
        }
    }
    

我正在使用Android Studio 4.0版本,并且在android项目中已经有了(test)包,这是一个默认的包。我把我的kotlin测试文件放在那里,没有任何问题。虽然我还没有运行这个文件,但是junit等导入错误都没有出现。希望这对你有所帮助。 - AdiAtAnd
2
testCompile is deprecated, should be replaced with testImplementation - JCarlosR

8
在我的情况下,问题是我没有导入。
androidTestImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

2020 年 5 月更新:此内容应该放在 build.gradle 的 dependencies { } 中。截至 Android Studio 版本 4 和当前 gradle 版本,变量的名称应该命名为 $version_kotlin,以便 gradle 正确地重新同步。


3
在应用程序模块的build.gradle文件中,将testImplementation替换为androidTestImplementation

1

首先确保在build.gradle.kts(project)中定义的Kotlin版本与编译器中selected的版本相同。

plugins {
    kotlin("jvm") version "1.4.21" apply false
}

如果这些版本仍然无法正常工作,则请按照以下步骤进行操作:
删除所有缓存文件夹,包括:
  • .gradle
  • .idea
使缓存失效/重启... 打开任何gradle文件(settings.gradle.kts) 在IDE顶部右侧单击“Link Gradle项目”

Link Gradle project

  1. 最后,指定使用JUnit 5来执行测试

build.gradle.kts

tasks.test {
    useJUnitPlatform()
}

注意:此行为可以通过GradleIDE进行定义。


很有可能,如果它有效且您具备所需的依赖项,则可能是缓存问题或gradle配置问题。

GL


1
清除缓存对我没有起作用,但是删除.gradle、.idea和build文件夹可以解决问题。谢谢! - Valerij Dobler

0
你应该:
1)删除“internal”单词 - 它不是必需的
2)在测试中使用简单的“assert”方法是错误的 - 使用来自“org.junit.Assert.*”的方法。

0

我正在使用Android Studio 4.0版本,android项目中已经有一个(test) package,那是一个默认的包,我将我的Kotlin测试文件放在那里,这没有任何问题。虽然我还没运行这个文件,但junit等导入错误并没有出现。希望这会有所帮助。


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