よくScala界隈だかScala界隈に限らないのかわからないけど"org.mockito" % "mockito-all" % "1.10.19"
が使われていることが多々ありますが、mockito-allは今後更新されなくて、mockito-coreのほうが更新されてるらしいので、そちらを使いましょう(そうしないとJava9で動かないなどの問題がある)
http://repo1.maven.org/maven2/org/mockito/mockito-core/
され、それは良いとして、version上げようとしたら(これ書いてる2017年4月時点で最新のmockito-core 2.7.22、Scala 2.12.2)
value anyLong is not a member of object org.mockito.Matchers
みたいに怒られました。え?と思ってコード確認したら以下のようになっています
https://github.com/mockito/mockito/blob/v2.7.22/src/main/java/org/mockito/ArgumentMatchers.java
https://github.com/mockito/mockito/blob/v2.7.22/src/main/java/org/mockito/Matchers.java
public class ArgumentMatchers { public static long anyLong() { //実装省略 } // その他anyやanyInt, anyStringなど }
public class Matchers extends ArgumentMatchers{ }
呼べるはずだよな・・・?Scalaに何か制限あったけ?とおもったらありました。(制限というかバグ?)
https://github.com/scala/bug/issues/7386
親のstaticメソッド呼び出せないのか、つらい。
ただ、今回の場合org.mockito.Matchersのclassに
@deprecated Use {@link ArgumentMatchers}. This class is now deprecated in order to avoid a name clash with Hamcrest
org.hamcrest.Matchers
class. This class will likely be removed in version 3.0.
というjavadocコメントあるので、いずれにせよArgumentMatchersに移行するしかなさそうです。
置き換える単純作業頑張ろう・・・