在我的應用程式中運行 junit-test 時出現此錯誤。我后來發現是因為宣告的欄位大小
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:899)
at java.util.TimSort.mergeAt(TimSort.java:516)
at java.util.TimSort.mergeCollapse(TimSort.java:441)
...
org.mockito.internal.configuration.injection.PropertyAndSetterInjection.orderedInstanceFieldsFrom(PropertyAndSetterInjection.java:125)
我發現可能的解決方案是添加這個標志。
-Djava.util.Arrays.useLegacyMergeSort=true在虛擬機引數中。但我想添加 pom.xml
我提到了this how to add VM args using pom xml,但它主要指的是-X標志,這里合適的位置是什么?
uj5u.com熱心網友回復:
我用surefire插件更新了pom.xml,并argLine按照這里的建議使用了引數
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<argLine>-Djava.util.Arrays.useLegacyMergeSort=true</argLine>
</configuration>
</plugin>
uj5u.com熱心網友回復:
有 2 種方法來配置 [surefire 插件中的系統屬性] ( https://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html )
選項1: systemPropertyVariables
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<systemPropertyVariables>
<java.util.Arrays.useLegacyMergeSort>true</java.util.Arrays.useLegacyMergeSort>
</systemPropertyVariables>
</configuration>
</plugin>
選項 2: argLine
某些系統屬性必須在分叉的 VM 的命令列上設定,并且在 VM 啟動后無法設定。這些屬性必須添加到 Surefire 插件的 argLine 引數中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<argLine>-Djava.util.Arrays.useLegacyMergeSort=true</argLine>
</configuration>
</plugin>
升級你的依賴
另一方面,我真的認為正確的解決方案是將 Mockito 升級到 2.1 或更高版本
2.1 于 2016 年 10 月發布,包含對您的問題的修復:使 PropertyAndSetterInjection 欄位排序一致 #176
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407149.html
標籤:
