프로그래밍/트러블슈팅

📌 [Java] Mockito 유닛 테스트 시 Java Agent 설정 이해하기

프로그래민구찌 2025. 2. 25. 14:51

Java에서 Mockito를 사용하여 유닛 테스트를 수행할 때 발생할 수 있는 경고 메시지에 대해 알아보겠습니다. 이러한 경고는 특히 mockito-inline을 사용할 때 자주 발생하며, 이를 해결하기 위해 Java agent를 추가해야 하는 경우가 있습니다.

⚠️ 경고 메시지 설명

다음과 같은 경고 메시지가 출력될 수 있습니다:

Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation.

 

이 메시지는 Mockito가 인라인 모의 객체 생성을 위해 스스로 연결되고 있지만, 향후 JDK의 업데이트에서 이 방식이 더 이상 지원되지 않을 것이라는 경고입니다. 따라서, 안정성을 위해 Java agent를 명시적으로 설정해야 합니다.

💡 Java Agent 추가 방법

Maven 프로젝트에서 이 문제를 해결하려면 maven-surefire-plugin에 Java agent를 추가하는 방법이 있습니다. 다음은 이를 설정하는 방법입니다:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <argLine>
            -javaagent:${settings.localRepository}/org/mockito/mockito-core/${mockito.version}/mockito-core-${mockito.version}.jar
            -Xshare:off
        </argLine>
    </configuration>
</plugin>

설정 원리 및 이유

  1. Java Agent의 역할: Java agent는 Java Virtual Machine(JVM)에서 실행 중인 프로그램에 추가적인 기능을 제공하는 도구입니다. Mockito가 인라인 모의 객체를 생성할 수 있도록 하려면, 이 기능을 활성화하기 위해 Java agent를 사용해야 합니다.
  2. 동적 로딩: 경고 메시지는 동적 로딩을 통해 Java agent가 메모리에 추가되었다는 것을 나타냅니다. 하지만 JDK의 미래 버전에서는 동적 로딩이 기본적으로 금지될 수 있으므로, 명시적으로 설정하는 것이 안전합니다.
  3. Xshare:off 설정: -Xshare:off 옵션은 JVM의 공유 클래스를 비활성화하는 설정입니다. 이 설정은 특정 상황에서 발생할 수 있는 문제를 피하기 위해 사용됩니다. Mockito와의 호환성을 보장하기 위해 이 설정을 추가합니다.

결론

Maven 프로젝트에서 Mockito를 사용할 때, Java agent를 명시적으로 설정하는 것이 중요합니다. 이를 통해 향후 JDK 업데이트에 대한 호환성을 유지하고, 안정적인 테스트 환경을 구축할 수 있습니다. 🚀

이제 Mockito를 사용할 때 발생할 수 있는 경고 메시지를 피할 수 있을 것입니다. 추가적인 질문이 있으시면 언제든지 문의해 주세요! 📩

 


참고

https://stackoverflow.com/questions/79278490/mockito-is-currently-self-attaching-to-enable-the-inline-mock-maker-this-will-n