我从一个全新的由gradle init任务生成的java-library项目开始。然后,我按照gradle java插件用户指南中给出的步骤添加了一个integrationTest任务:https://docs.gradle.org/current/userguide/java_testing.html#sec:configuring_java_integration_tests。但是现在gradle eclipse插件在.classpath文件中不包含intTestImplementation依赖项。使用gradle build test任务可以很好地编译、测试和运行一切,但是因为.classpath缺少intTestImplementation依赖项,所以VSCode说我的集成测试类使用了未定义的类型。
我试着调整文档中显示的关于gradle eclipse插件的配置,但我在那里的尝试都没有帮助。https://docs.gradle.org/current/dsl/org.gradle.plugins.ide.eclipse.model.EclipseClasspath.html
这是我的build.gradle文件
plugins {
id 'java-library'
id 'eclipse'
}
repositories {
jcenter()
}
sourceSets {
intTest {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
}
}
configurations {
intTestImplementation.extendsFrom implementation
intTestRuntimeOnly.extendsFrom runtimeOnly
}
dependencies {
intTestImplementation 'junit:junit:4.12'
}
task integrationTest(type: Test) {
description = 'Runs integration tests.'
group = 'verification'
testClassesDirs = sourceSets.intTest.output.classesDirs
classpath = sourceSets.intTest.runtimeClasspath
shouldRunAfter test
}并且运行gradlew eclipse会生成如下所示的类路径,缺少junit依赖项
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin/default"/>
<classpathentry output="bin/main" kind="src" path="src/main/java">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test,intTest"/>
</attributes>
</classpathentry>
<classpathentry output="bin/main" kind="src" path="src/main/resources">
<attributes>
<attribute name="gradle_scope" value="main"/>
<attribute name="gradle_used_by_scope" value="main,test,intTest"/>
</attributes>
</classpathentry>
<classpathentry output="bin/test" kind="src" path="src/test/java">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
</attributes>
</classpathentry>
<classpathentry output="bin/test" kind="src" path="src/test/resources">
<attributes>
<attribute name="gradle_scope" value="test"/>
<attribute name="gradle_used_by_scope" value="test"/>
</attributes>
</classpathentry>
<classpathentry output="bin/intTest" kind="src" path="src/intTest/java">
<attributes>
<attribute name="gradle_scope" value="intTest"/>
<attribute name="gradle_used_by_scope" value="intTest"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-10/"/>
</classpath>我本以为gradle eclipse任务会生成带有junit依赖项的.classpath文件,但却没有生成。
发布于 2021-07-09 00:31:45
我也曾在集成测试中苦苦挣扎。这是我的解决方案,对我有效。
更改sourceSet:
sourceSets{
intTest {
compileClasspath += sourceSets.main.output
runtimeClasspath += sourceSets.main.output
java.srcDirs=files('src/intTest/java')
resources.srcDirs=files('src/intTest/resources')
}
}这应该可以修复类路径。
我还面临着另一个问题:我的集成测试运行了.gradlew集成,但是在VS代码中,我得到了一个编译错误,尽管依赖项(仅为集成测试任务设置)添加了,但没有找到库
intTestImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'当我在VScode中点击"Run test“时,我得到了一个编译异常。这可能是VSCode中的一个错误,因为我也尝试在intelliJ中使用相同的代码,没有错误,集成测试在intellij中运行良好。
为了消除这个错误,我还添加了测试依赖项:
testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner'https://stackoverflow.com/questions/57932932
复制相似问题