我有一个使用 Gradle 6.4 版和 JDK 8 构建的项目。我正在尝试将 Gradle插件用于测试装置( java-test-fixtures),但我在依赖项方面遇到了一些问题。
根据上面链接的 Gradle 页面,该项目的结构应如下所示:
core-module
-- src
-- main
-- java
-- test
-- java
-- testFixtures
-- java
Run Code Online (Sandbox Code Playgroud)
虽然该build.gradle.kts文件具有以下依赖项部分:
core-module
-- src
-- main
-- java
-- test
-- java
-- testFixtures
-- java
Run Code Online (Sandbox Code Playgroud)
现在,在testFixtures/java源文件夹中的 IntelliJ(我正在使用的 IDE)类中查看源文件夹中的类main/java。所以我可以在下面添加新的 Java 类testFixtures/java,这些类依赖于main. 但是,我将无法从外部库导入依赖项com.my.external.project:1.0。当我尝试运行 Gradle 任务时,问题得到确认compileTestFixturesJava。
我可以复制该dependencies部分中的条目;例如我可以添加:
dependencies {
api("com.my.external.project:1.0")
// ... more API dependencies
testFixturesCompileOnly(project(":core-module")) …Run Code Online (Sandbox Code Playgroud) java dependency-management gradle gradle-kotlin-dsl java-test-fixtures
我试图在我的 kotlin 项目中使用测试装置。不幸的是,我在工具链的一个组件中遇到了一个奇怪的问题,可能是一个错误(不确定是哪个)。
通常,可以从同一包中的单元访问已main声明的 Kotlin 函数。有许多证据支持这一说法,尤其是Kotlin:使单元测试可见的内部函数internaltest
事实上,如果我们有src/main/kotlin/ main.kt:
@file:JvmName("Main")
package org.example.broken_test_fixtures
internal fun sayHello(who: String): String = "Hello, $who!"
fun main() {
println(sayHello("world"))
}
Run Code Online (Sandbox Code Playgroud)
和src/test/kotlin/SayHelloTest.kt:
package org.example.broken_test_fixtures
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
class SayHelloTest {
@Test
fun testSayHello() {
val expected = "Hello, world!"
val actual = sayHello("world")
assertEquals(actual, expected)
}
}
Run Code Online (Sandbox Code Playgroud)
测试通过常规build.gradle.kts成功通过:
plugins {
kotlin("jvm") version "1.3.61"
}
group = "org.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral() …Run Code Online (Sandbox Code Playgroud) unit-testing gradle kotlin java-test-fixtures kotlin-gradle-plugin