Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到单独文件夹库中的IntelliJ集成测试:Springboot与Gradle项目配置问题_Java_Spring Boot_Gradle_Intellij Idea - Fatal编程技术网

Java 未找到单独文件夹库中的IntelliJ集成测试:Springboot与Gradle项目配置问题

Java 未找到单独文件夹库中的IntelliJ集成测试:Springboot与Gradle项目配置问题,java,spring-boot,gradle,intellij-idea,Java,Spring Boot,Gradle,Intellij Idea,我有一个intelliJ Springboot Gradle项目,其结构如下: MyProject ├── build.gradle └── src ├── integration (integration test sources root) │ ├── java │ │ └── com... │ └── resources │ ├── main (sources root) │ ├── java │ │

我有一个intelliJ Springboot Gradle项目,其结构如下:

MyProject
├── build.gradle
└── src
    ├── integration (integration test sources root)
    │   ├── java 
    │   │   └── com...
    │   └── resources
    │
    ├── main (sources root)
    │   ├── java
    │   │   └── com...
    │   └── resources
    │
    ├── test (test sources root)
    │   └── java
    │       └── com...
    │...
我的build.gradle如下所示:

plugins {
    id 'org.springframework.boot' version '2.4.3'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'java.bike'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '8'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

sourceSets {
    integration {
        compileClasspath += main.output + test.output
        runtimeClasspath += main.output + test.output
        java.srcDirs('./src/integration/java')
        resources.srcDirs('./src/integration/resources')
    }
}

task integrationTest(type: Test) {
    description = 'Runs the integration tests.'
    group = 'verification'
    testClassesDirs = sourceSets.integration.output.classesDirs
    classpath = sourceSets.integration.runtimeClasspath
    outputs.upToDateWhen { false }
    // This is not needed, but I like to see which tests have run
    testLogging { events "passed", "skipped", "failed" }
    // mustRunAfter test
}

tasks.withType(Test) {
    useJUnitPlatform()
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'org.postgresql:postgresql'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.assertj:assertj-core'
}
现在,我在
src/test
中有两个单元测试,它们工作得非常好

但是,对于集成测试,例如:

package com.bike;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class BorrowMyBikeApplicationTests {

    @Test
    void contextLoads() {
    }
}
它在类路径中找不到任何库,因此,例如对于
@SpringBootTest
,它建议
将库Gradle:SpringBootTest:2.4.3添加到类路径
,而对于
@test
则建议将JUnit4/5添加到类路径

放置在
src/test
中的相同测试可以正常工作

当然,我可以接受这些建议,但我必须在每次签出项目时添加这些依赖项。我更喜欢它在
集成
文件夹中工作,就像它在
测试
文件夹中工作一样

我遗漏了什么,以及如何实现这种配置,使其开箱即用?

通过拖网,我找到了答案:

我缺少集成测试的配置,如:

configurations {
    integrationImplementation.extendsFrom testImplementation
    integrationRuntimeOnly.extendsFrom testRuntimeOnly
} 
请注意
integrationImplementation.extendsFrom
应该是
[集成测试源集的名称]实现。extendsFrom
(在我的例子中是
intgeration
),与
integrationRuntimeOnly.extendsFrom相同

可选:您还可以扩展您的源集(即使没有,它似乎也可以工作,但我发现这样更干净):


有帮助吗?谢谢,但遗憾的是,没有太多。我已经拥有了所有这些,我的问题是,库/依赖项在
集成
文件夹中看不到,这是IntelliJ IDEA特有的,或者它也会影响命令行Gradle构建?实际上,两者都是,Gradle无法找到依赖项
sourceSets {
    main {
        java.srcDirs('./src/main/java')
        resources.srcDirs('./src/main/resources')
    }
    test {
        java.srcDirs('./src/test/java')
        resources.srcDirs('./src/test/resources')
    }
    integration {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
        java.srcDirs('./src/integration/java')
        resources.srcDirs('./src/integration/resources')
    }
}