Mockito-inline 5.2.0 설정 가이드라인
최근 Kotlin 기반 프로젝트에서 mockito-inline:5.2.0 의존성을 추가했을 때, 빌드 에러가 발생했다.
그리고 JDK 8 환경에서 아래와 같은 컴파일 에러를 경험하기도 했다.
Cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8
이 글에서는 Kotlin + Gradle 프로젝트에서 Mockito-inline 5.2.0을 완전히 정상 동작시키는 단계별 해결 절차를 정리했다.
1️⃣ 문제 원인 요약
| 문제 유형 | 원인 |
| Could not find org.mockito.mockito-ilnine:5.12.0 | Maven 중앙 저장소에 존재하지 않는 버전 요청 |
| Cannot inline bytecode built with JVM target 11 .. | Kotlin 컴파일러 JVM 타겟(1.8)과 의존성 빌드 타겟(11 이상) 불일치 |
| Annotation argument must be a compile-time constant | Kotlin 1.8 이하에서 JUnit 5 확장 어노테이션 처리 불완전 |
| MockitoExtension Unresolved | Mockito-core / Mockito-inline 버전 불일치 또는 JUnit5 의존성 누락 |
핵심은 JDK 버전 및 Kotlin/Gradle 설정 불일치였다.
2️⃣ 환경 개요 (목표)
| 구성 | 버전 |
| JDK | Amazon Corretto 17 |
| Gradle | 8.x 이상 |
| Kotlin | 1.9.x 이상 |
| Mockito-inline | 5.2.0 |
| JUnit 5 | 5.10.x 이상 |
3️⃣ JDK 17 환경으로 전환
Mockito 5.x 이상은 JDK 11 이상을 필요로 한다. 현재 프로젝트는 JDK 8 환경이어서 컴파일 자체가 실패했다.
✅ 설치 및 설정
1. Amazon Corretto 17 설치
> https://aws.amazon.com/corretto 에서 다운로드 후 설치.
2. 환경 변수 설정 (Windows 기준)
setx JAVA_HOME "C:\Program Files\Amazon Corretto\jdk17.0.17_10"
setx PATH "%JAVA_HOME%\bin;%PATH%"
3. 새 CMD에서 확인
java -version
openjdk version "17.0.17"
OpenJDK Runtime Environment Corretto-17.0.17.10
4️⃣Gradle & Kotlin 설정
Gradle JVM 지정 (build.gradle.kts)
Gradle이 자동으로 JDK 17 Toolchain을 사용하도록 지정한다.
kotlin {
jvmToolchain(17)
}
Kotlin 컴파일 옵션 (대체 방식)
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions.jvmTarget = "17"
}
Gradle Wrapper 버전 확인
./gradlew -v
Gradle 7.0 이상이면 OK. 그 이하라면 다음으로 업그레이드:
./gradlew wrapper --gradle-version 8.6
5️⃣ Mockito 및 JUnit 의존성 추가
테스트 코드에서 @ExtendWith(MockitoExtension::class) 를 사용하려면 JUnit5와 Mockito-inline을 함께 선언해야 한다.
dependencies {
...
testImplementation(kotlin("test"))
// JUnit5
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0")
// Mockito + JUnit5 통합
testImplementation("org.mockito:mockito-junit-jupiter:5.10.0")
// Kotlin-friendly syntax (verify, whenever 등)
testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
// final, static 클래스 mock 객체 생성을 위한 mockito-inline
testImplementation("org.mockito:mockito-inline:5.2.0")
}
6️⃣Kotlin 테스트 예시 (정상 동작 확인용)
package com.chat.server
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
import org.mockito.kotlin.whenever
import java.net.Socket
import kotlin.test.assertEquals
@ExtendWith(MockitoExtension::class)
class ClientHandlerTest {
@Mock
lateinit var mockSocket: Socket
@Mock
private lateinit var mockInetAddress: java.net.InetAddress
@Test
fun `socket mock test`() {
whenever(mockSocket.inetAddress).thenReturn(mockInetAddress)
whenever(mockInetAddress.hostName).thenReturn("localhost")
assertEquals("localhost", mockSocket.inetAddress.hostName)
}
}
실행 결과 :
BUILD SUCCESSFUL
7️⃣ IntelliJ 설정 점검
아래 설정이 일치하지 않으면 IntelliJ 내부 실행 시에는 여전히 java 1.8이 사용될 수 있다.
- File → Project Structure → Project SDK: Amazon Corretto 17

- File → Settings → Build Tools → Gradle → Gradle JVM: Corretto 17

- File → Settings → Kotlin Compiler → Target JVM version: 17

8️⃣ 최종 확인 명령
./gradlew clean test --refresh-dependencies
성공 메시지가 출력되면 모든 설정이 정상이다.
9️⃣ 정리 – 가장 중요한 점 3가지
| 항목 | 설명 |
| JDK 17 이상 필수 | Mockito 5.x는 JDK 11 이상 필요 |
| Kotlin JVM Target 17 | Kotlin bytecode 호환성 유지 |
| JUnit 5 + Mockito-inline 5.2.0 | 최신 버전 호환성 확보 |
결론
JDK 8 환경에서 Mockito-inline 5.x를 시도하면 반드시 빌드 실패가 발생한다.
Kotlin 프로젝트라면 Gradle JVM Toolchain 설정이 가장 중요하다.
이 가이드를 따르면 1) 의존성 문제, 2) JVM 타겟 불일치, 3) Mockito/JUnit 확장 인식 문제를 모두 한 번에 해결할 수 있다.
Mockito 활용 가이드
- [Java] Spring Boot Mockito 이해하기 : 테스트 흐름 및 사용예시
Powered By. Gemini
'Backend' 카테고리의 다른 글
| [Backend] Jackson 기반 직렬화·역직렬화의 원리와 적용 절차 (0) | 2025.11.17 |
|---|---|
| [Backend] Slf4J 와 Logback 로깅 도입 가이드 (0) | 2025.11.17 |
| [Backend] JVM의 의존성 관리와 빌드 도구 분석 (0) | 2025.10.17 |
| [Backend] ByteArray class 이해하기 (1) | 2025.10.16 |
| [Backend] 서버-클라이언트 연결 (ServerSocket & Socket) (0) | 2025.10.16 |