org.junit.jupiter.api라는 걸 찾을 수 없는 문제

Yeonbi_Kim·2024년 11월 24일
post-thumbnail
스크린샷 2024-11-24 오후 5 56 37

org.junit.jupiter.api라는 걸 찾을 수 없다는 뜻이다.
이건 우리가 테스트를 하기 위해 쓰는 “JUnit”이라는 도구를 사용하는데, 이 도구를 컴퓨터가 어디 있는지 모르기 때문이다

문제점

문제점 경우의 수 1. - 라이브러리를 gradle에 추가하지 않았을까?

  1. JUnit 라이브러리가 없다: JUnit은 Java에서 테스트 코드를 실행하게 해주는 도구인데, 이 라이브러리를 추가하지 않아서 컴퓨터가 못 찾는 것이다.
  2. Gradle 설정 문제일 가능성: 보통 이런 도구를 쓰려면 build.gradle(Gradle) 파일에 설정을 추가해야 한다.


해결 방법

  1. JUnit이라는 책을 가져오기:
    • 우리가 책을 읽으려면 책장에 책이 있어야 하잖아요? 지금은 책장(JUnit 라이브러리)이 없어서 에러가 난 거예요.
    • 책장을 추가하려면 JUnit이라는 책이 어디 있는지 알려줘야 해요.

  2. 설정 파일에 추가하기:
    • 프로그램에서 책장을 추가하려면 설정 파일에 한 줄을 적어야 해요.
    • Gradle을 쓰는 경우라면, build.gradle 파일에 아래 코드를 추가한다.

    testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'}

하지만,이미 이 코드는 있다.

  1. 프로젝트 업데이트하기:
    • 위 내용을 추가하고 나서, IDE(예: IntelliJ)를 업데이트해야 한다.
    • IntelliJ에서 오른쪽 위에 있는 Maven 또는 Gradle 버튼을 눌러서 새로 고침(Refresh)하면 된다.

  2. 에러 해결 확인:
    • 이제 다시 실행해보면, 컴퓨터가 JUnit을 어디서 찾을지 알게 돼서 에러가 사라질 것이다.


해결책 경우의 수 2. - Gradle 캐시 재빌드 강제 실행

Gradle 캐시가 손상되었을 가능성이 있습니다. 아래 명령어를 터미널에서 실행해야 한다.

bash

./gradlew clean build --refresh-dependencies

해결책 경우의 수 3 - IntelliJ IDEA 설정 확인

IDE에서 Gradle과 프로젝트가 제대로 동기화되지 않았을 가능성이 있다.
1. Gradle 빌드 도구 확인:
• IntelliJ 메뉴에서 File > Settings > Build, Execution, Deployment > Build Tools > Gradle로 이동한다.
• Build and run using 및 Run tests using이 모두 Gradle로 설정되어 있는지 확인한다.
2. JDK 확인:
• File > Project Structure > SDKs에서 프로젝트 SDK가 Java 17로 설정되었는지 확인한다.
• Gradle JVM도 Java 17이어야 한다.
3. Gradle 동기화:
• IntelliJ 오른쪽 Gradle 탭에서 새로고침 아이콘(🔄)을 클릭한다.


해결책 경우의 수 4. - JUnit 및 AssertJ 종속성 명시적 추가

Gradle 파일에 필요한 JUnit과 AssertJ 종속성을 명확히 추가했는지 확인하세요. 다음을 build.gradle에 추가한다.

gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.3'
    testImplementation 'org.assertj:assertj-core:3.24.2'
}

해결책 경우의 수 5- @Test와 @DisplayName 인식 여부 확인

JUnit과 AssertJ가 제대로 인식되지 않는 경우,
@Test 및 @DisplayName 어노테이션을 테스트하기 위해 아래 단순 테스트 코드를 작성 해 봐야한다. :


import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class SimpleTest {

    @Test
    void simpleTest() {
        int a = 10;
        int b = 20;
        assertThat(a + b).isEqualTo(30);
    }
}



package hello.core.beanfind;

import hello.core.AppConfig;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import static org.assertj.core.api.Assertions.assertThat;

public class ApplicationContextInfoTest {

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

    @Test
    @DisplayName("모든 빈 출력하기")
    void findAllBean() {
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            Object bean = ac.getBean(beanDefinitionName);
            System.out.println("name=" + beanDefinitionName + " object=" + bean);
        }
    }

    @Test
    @DisplayName("애플리케이션 빈 출력하기")
    void findApplicationBean() {
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

            //Role ROLE_APPLICATION : 직접 등록한 애플리케이션 빈
            //Role ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
            if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
                Object bean = ac.getBean(beanDefinitionName);
                System.out.println("name=" + beanDefinitionName + " object=" + bean);
            }

        }
    }
}

최종 해결책 - 테스트 소스 경로 확인

테스트 코드는 src/test/java 디렉토리 아래에 있어야 합니다. 현재 테스트 파일이 src/main/java 아래에 있는 것처럼 보입니다.

해결 방법:
1. ApplicationContextInfoTest 파일을 src/test/java/hello/core/beanfind/로 이동한다.
2. 파일을 이동한 후 Gradle 프로젝트를 새로고침한다.

테스트 코드는 반드시 test 디렉토리에 위치해야 junit이 정상적으로 작동된다.

0개의 댓글