Saya memiliki proyek gradle dan ketika bagian dependensi build.gradle saya terlihat seperti ini:
dependencies {
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
testImplementation group: 'org.mockito', name: 'mockito-all', version: '1.10.19'
testImplementation 'junit:junit:4.12'
// testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.4'
compileOnly 'org.projectlombok:lombok:1.18.4'
apt 'org.projectlombok:lombok:1.18.4'
}
itu mengarah ke pengecualian ini:
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18)
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
untuk memperbaiki masalah ini, saya telah mengganti "mockito-all" dengan "mockito-core".
dependencies {
implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
// testImplementation group: 'org.mockito', name: 'mockito-all', version: '1.10.19'
testImplementation 'junit:junit:4.12'
testCompile group: 'org.mockito', name: 'mockito-core', version: '2.23.4'
compileOnly 'org.projectlombok:lombok:1.18.4'
apt 'org.projectlombok:lombok:1.18.4'
}
Penjelasan antara mockito-all dan mockito-core dapat ditemukan di sini:
https://solidsoft.wordpress.com/2012/09/11/beyond-the-mockito-refcard-part-3-mockito-core-vs-mockito -semua-dalam-proyek berbasis-mavengradle /
mockito-all.jar selain Mockito sendiri mengandung juga (pada 1.9.5) dua dependensi: Hamcrest dan Objenesis (mari kita hilangkan ASM dan CGLIB yang dikemas ulang sejenak). Alasannya adalah untuk memiliki segala yang dibutuhkan di dalam satu JAR untuk meletakkannya di classpath. Ini mungkin terlihat aneh, tetapi tolong ingat bahwa pengembangan Mockito dimulai pada saat ketika semut murni (tanpa manajemen ketergantungan) adalah sistem pembangunan yang paling populer untuk proyek-proyek Java dan semua JAR eksternal yang diperlukan oleh suatu proyek (yaitu ketergantungan proyek kami dan ketergantungannya) telah untuk diunduh secara manual dan ditentukan dalam skrip build.
Di sisi lain mockito-core.jar hanya kelas Mockito (juga dengan ASM dan CGLIB yang dikemas ulang). Ketika menggunakannya dengan Maven atau Gradle, dependensi yang diperlukan (Hamcrest dan Objenesis) dikelola oleh alat-alat tersebut (diunduh secara otomatis dan dimasukkan ke dalam jalur tes). Hal ini memungkinkan untuk menimpa versi yang digunakan (misalnya jika proyek kami tidak pernah menggunakan, tetapi versi yang kompatibel ke belakang), tetapi yang lebih penting ketergantungan itu tidak tersembunyi di dalam mockito-all.jar apa yang memungkinkan untuk mendeteksi kemungkinan ketidaksesuaian versi dengan alat analisis ketergantungan. Ini adalah solusi yang jauh lebih baik ketika alat yang dikelola ketergantungan digunakan dalam suatu proyek.