인프런 커뮤니티 질문&답변

rlagkwls1024님의 프로필 이미지
rlagkwls1024

작성한 질문수

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

assertThat import 문제

해결된 질문

작성

·

1K

1

assertThat import 안되는 문제

선생님 안녕하세요. 이번에 새로 수강하고 있는 수강생입니다.

프로젝트 다운 받고 실행을 시켜려고 하는데 실행이 안돼서 따로 설정해서 돌리고 있습니다.
Junit5까지는 진행했지만 assertThat 코드를 호출하는 진도에서 실행이 안되고 있습니다.

혹시 어떤 방법으로 해결 할 수 있을까요? 찾아도 안나오네요 ㅠㅜ
build.gradle.kts 파일입니다

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "3.0.6"
    id("io.spring.dependency-management") version "1.1.0"

    id("java")
    id("org.jetbrains.kotlin.plugin.jpa") version "1.7.22"
//    id("org.jetbrains.kotlin.plugin.spring") version "1.7.22"
    id("org.jetbrains.kotlin.kapt") version "1.7.22"

    kotlin("jvm") version "1.7.22"
    kotlin("plugin.spring") version "1.7.22"
}

group = "com.example.kotlin"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlin:kotlin-reflect:1.7.22")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3")
    implementation("org.junit.jupiter:junit-jupiter:5.8.1")
    implementation("com.querydsl:querydsl-jpa:5.0.0")
    kapt("com.querydsl:querydsl-apt:5.0.0:jpa")
    kapt("org.springframework.boot:spring-boot-configuration-processor")
    runtimeOnly("com.h2database:h2")
    testImplementation("org.assertj:assertj-core:3.21.0")

    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-web-services")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation(kotlin("test"))
}

tasks {
    test {
        useJUnitPlatform()
    }
    withType<KotlinCompile> {
        kotlinOptions {
            freeCompilerArgs = listOf("-Xjsr305=strict")
            jvmTarget = "17"
        }
    }
    withType<Test> {
        useJUnitPlatform()
    }
}

답변 1

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, rlagkwls1024님!! 🙂 질문 올려주셔서 감사합니다!!

올려주신 내용을 확인해 보았을 때, assertThat 이 import 되지 않는 현상은,

implementation("org.junit.jupiter:junit-jupiter:5.8.1")

때문인 것으로 추측됩니다!

assertThat 은 보통 테스트 패키지에서 관리되고, 테스트 패키지에서 특정 라이브러리를 바로 import를 하기 위해서는 implementation 대신 testImplementation 을 사용해야 하기 때문입니다.

이 코드를

testImplementation("org.junit.jupiter:junit-jupiter:5.8.1")

로 변경해보시면 import 가 가능할 것 같습니다.

혹시나 이렇게 변경해보셨는데도 잘 안된다면 말씀해주세요!

감사합니다!! 😊 🙇

rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

답변 감사합니다. :)
알려주신 방법을 시도해봤습니다.
하지만 결과로 import org.junit을 참조 할 수 없게 되었고 assertThat은 여전히 참조할 수 없었습니다.
1. build clean -> build
2. intellij 캐시 삭제 이후 재시동 -> 빌드
위의 두가지 방법 또한 시도해봤지만 결국 assertThat을 참조할 수 없었습니다.
혹시 다른 해결방법이 있을까요??

최태현님의 프로필 이미지
최태현
지식공유자

허걱..!! 그렇군요! 😭 혹시 가능하시다면 github에 올려서 주소를 알려주실 수 있으실까요?! 제가 직접 확인해보고 assertThat import가 가능하도록 수정해보겠습니다! 🙂

rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

빠른 답변 감사합니다 :)
깃허브 주소 : https://github.com/zookeeper464/Kotiln_Spring
올려놓은 주소입니다!

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요!! 올려주신 git을 clone 받아 확인해본 결과, 저 같은 경우는 assertThat 이 정상적으로 import 됩니다!!

image

그렇다면... gradle 설정에 현재 문제가 있는 것은 아니니.. IntelliJ 설정이 의심되는데요!

image

혹시 src/test/kotlin이 이렇게 초록색 폴더로 표시되실까요?!! 이 의미는 해당 폴더를 "테스트 폴더로 인식한다"라는 의미입니다! 이 덕분에 이 폴더 안의 클래스를 테스트 영역으로 인식하고, testImplementation 과 같은 의존성의 라이브러리를 import 하는 방식이거든요!

image

만약, 초록색으로 보이지 않으신다면, test/kotlin/ 에 커서를 두시고 마우스 우클릭 > Mark Directory as > Test Root 라고 있을겁니다! 그것을 눌러주시면 테스트 root 폴더로 인지하게 될거에요!!

 

꼭 해결되셨으면 좋겠습니다! 😭 감사합니다!!

 

rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

다시 확인해주셔서 감사합니다.🥲
imageimageimageimage

현재 확인해주신 부분 다 확인했고 캐시도 다 삭제하고 다시 빌드하고 했는데 맨마지막 이미지와 같이 import가 안됩니다. ㅠㅠ
분명 External Libraries에 Gradle이 추가됐는데도 그렇네요...
혹시 몰라서 Gradle에 추가된 META-INF의 pom.xml에서 오류가 발생한 부분이 있어서 해당 부분 올려드립니다.
project.build.plugins 내부에 있는 xml 일부분입니다.

rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <release>8</release>
        </configuration>
        <executions>
          <execution>
            <id>jdk9</id>
            <goals>
              <goal>compile</goal>
            </goals>
            <configuration>
              <release>9</release>
              <compileSourceRoots>
                <compileSourceRoot>${project.basedir}/src/main/java9</compileSourceRoot>
              </compileSourceRoots>
              <multiReleaseOutput>true</multiReleaseOutput>
            </configuration>
          </execution>
        </executions>
      </plugin>
rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

위의 xml 중에서 해당 필드들이 에러가 발생합니다.
아래 두가지 필드는 다음과 같은 에러가 나오며, Element release is not allowed here
<release>8</release>

<release>9</release>
아래 필드는 당므과 같은 에러가 나옵니다. Element multiReleaseOutput is not allowed here

<multiReleaseOutput>true</multiReleaseOutput>

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요!! 추가적인 상황 알려주셔서 감사합니다! 😊

혹시 매우 조심스러운 추측이지만, 사용하고 계신 빌드 툴이 maven으로 되어 있으시지는 않을까요?!! 말씀해주신 pom.xml 은 (제가 알고 있기로) maven에서 사용하고 있는 빌드 설정 파일입니다!

만약, 프로젝트 빌드 툴이 maven으로 되어 있다면

  1. build.gradle 설정을 알맞게 해도 import 되지 않음

  2. pom.xml 파일이 생성되어 있음
    (저 같은 경우는 clone 받은 프로젝트에서 pom.xml 파일을 찾아볼 수 없었습니다!)

을 모두 설명할 수 있을 것 같아요!

rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

image여기에 들어있습니다!
빌드 툴은 gradle.kotlin 사용중에 있습니다!

최태현님의 프로필 이미지
최태현
지식공유자

아하~ 말씀해주신 "Gradle에 추가된 META-INF의 pom.xml"라는 것이

gradle이 external library로 잘 가져온 assertj-core jar 파일 안에 있는 META-INF 안의 pom.xml 을 말씀해주신거군요!! 확인 완료했습니다!

그렇다면 혹시 xml에서 에러가 나온다는 것은 어떻게 알게 되셨나요?!! 저도 동일한 pom.xml 을 들어가보았는데 별다른 에러나 로그가 존재하지 않습니다!! 😭

제 환경에서는 재연이 되지 않다 보니 도움 드리는데 어려움이 있네요!! 😭

image

이것으로 해결 될 수 있을지 모르겠지만.. IntelliJ로 테스트가 돌아가게 설정되어 있다면 IDE 대신 Gradle을 이용해 실행 시켜 보는 것도 방법일 것 같습니다!!

image

또한, IDE에서는 import 가 되지 않으시더라도 터미널에서 ./gradlew test 는 잘 동작한다면 IntelliJ에서만 import가 되지 않은 것처럼 간주되는 것이라고 확신할 수 있을 것 같아요!

rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자


> Task :compileKotlin FAILED
e: /Users/hajin/Documents/save_file/playground_spring/src/main/kotlin/com/group/libraryapp/calculator/JunitCalculator.kt: (3, 12): Unresolved reference: assertj
e: /Users/hajin/Documents/save_file/playground_spring/src/main/kotlin/com/group/libraryapp/calculator/JunitCalculator.kt: (10, 9): Unresolved reference: assertThat

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
   > Compilation error. See log for more details

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
4 actionable tasks: 2 executed, 2 up-to-date
rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

말씀해주신 명령어로 확인한 결과 저런 에러가 나오고 있습니다 ㅠㅠ
인식을 못하는 것 같아요...
에러라는건 빨간색 에러 표기가 intellij에서 나와서 말씀드렸어요!

rlagkwls1024님의 프로필 이미지
rlagkwls1024
질문자

image이 부분도 말씀하셔서 첨부 드립니다.
해당 사진과 같이 gradle로 설정된 상태로 진행했습니다!

최태현님의 프로필 이미지
최태현
지식공유자

ㅠㅠㅠ gradle이 완전 인식을 못하는군요…! 😭 그럼 더 생각나는건 2가지 입니다!!

  • gradle clean 실행하기 : IntelliJ gradle 패널에서 돌리실 수도 있고 터미널에서 돌리실 수도 있어요!!

  • gradle 캐시파일 날리기 : 프로젝트 루트에서 rm -rf .gradle을 하시면 gradle 캐시파일이 날라갑니다! IDE cache와는 또 다른 부분이에요!!

rlagkwls1024님의 프로필 이미지
rlagkwls1024

작성한 질문수

질문하기