這個(gè)問題是由于Mockito在嘗試通過自我附加(self-attaching)的方式啟用inline-mock-maker
時(shí)觸發(fā)的警告。隨著JDK版本的升級(jí),這種機(jī)制可能不再被支持,需要顯式配置Mockito作為Java代理(agent)來解決問題。以下是逐步解決方案:
1. 確認(rèn)依賴版本
首先檢查項(xiàng)目中Mockito的版本。較新的Mockito版本可能已優(yōu)化該問題。建議使用Mockito 3.12.x及以上版本(推薦最新穩(wěn)定版)。
在 pom.xml
中升級(jí)Mockito版本:
<properties> <mockito.version>5.11.0</mockito.version> <!-- 使用最新版本 --> </properties> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>${mockito.version}</version> <scope>test</scope> </dependency>
在 build.gradle
中升級(jí)Mockito:
testImplementation 'org.mockito:mockito-core:5.11.0' // 使用最新版本
需要在測試運(yùn)行器中添加Java代理參數(shù),使Mockito能夠正確附加到JVM。
在 pom.xml
的 maven-surefire-plugin
中添加代理參數(shù):
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.0</version> <!-- 確保版本支持參數(shù)配置 --> <configuration> <argLine> -javaagent:"${settings.localRepository}/org/mockito/mockito-agent/${mockito.version}/mockito-agent-${mockito.version}.jar" </argLine> </configuration> </plugin> </plugins> </build>
在 build.gradle
的測試任務(wù)中添加JVM參數(shù):
test { jvmArgs "-javaagent:${classpath.find { it.name.contains("mockito-agent") }.absolutePath}" }
如果項(xiàng)目間接依賴了舊版Mockito(例如通過Spring Boot Starter),可以通過排除舊依賴強(qiáng)制使用新版本。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> </exclusion> </exclusions> </dependency>
testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.mockito', module: 'mockito-core' }
運(yùn)行測試命令(如 mvn test
或 gradle test
),觀察是否仍有警告。如果配置正確,警告應(yīng)消失且測試正常通過。
如果不需要Mockito的inline-mock-maker
功能(例如不Mock final
類或方法),可以移除mockito-inline
依賴:
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>${mockito.version}</version> <scope>test</scope> </dependency>