この投稿を参照してください。
Array の == 関数が Array(1,2) == Array(1,2) に対して true を返さないのはなぜですか?
ScalaMock は正常に動作していますが、配列の等価性により、予想される引数が実際の引数と一致しません。
たとえば、これは機能します:
"test" should "pass" in {
val repo = stub[Repo]
val a = Array(1L)
(repo.getState _).when(a).returns("OK")
val result = repo.getState(a)
assert(result == "OK")
}
org.scalamock.matchers.ArgThat
ただし、カスタム マッチャー ( で定義)を追加する方法もあります。
"test" should "pass" in {
val repo = stub[Repo]
(repo.getState _).when(argThat[Array[_]] {
case Array(1L) => true
case _ => false
}).returns("OK")
val result = repo.getState(Array(1L))
assert(result == "OK")
}
更新 - 混合ワイルドカード、リテラル、argThat の例:
trait Repo {
def getState(foo: String, bar: Int, IDs: Array[Long]): String
}
"test" should "pass" in {
val repo = stub[Repo]
(repo.getState _).when(*, 42, argThat[Array[_]] {
case Array(1L) => true
case _ => false
}).returns("OK")
val result = repo.getState("banana", 42, Array(1L))
assert(result == "OK")
}