使用类型化的值类作为 ID 是 Scala 中的一种常见模式。但是,在对将值类作为参数的方法进行存根时,Mockito 似乎存在问题。在下面的示例中,具有实际值的第一个存根可以正常工作,但是使用参数匹配器的第二个存根会抛出 NullPointerException。
我发现的唯一参考是这个问题,但那里显示的解决方案不起作用。任何人都知道解决方案或解决方法?
版本是:org.mockito:mockito-all:1.10.19和org.specs2:specs2_2.11:2.4.15
import org.specs2.mutable.Specification
import org.specs2.matcher.Matchers
import org.specs2.mock.Mockito
case class ID[T](val id:Long) extends AnyVal
trait DAO[T]{
def get(id:ID[T]):T
}
class MockitoIDStubTest extends Specification with Mockito with Matchers{
"Mockito" should{
"properly stub with argument value" in {
val m = mock[DAO[String]
m.get(ID[String](1)).returns("abc")
m.get(ID[String](1)) must_== "abc"
}
"properly stub with argument matcher" in {
val m = mock[DAO[String]
m.get(any[ID[String]]).returns("abc")
m.get(ID[String](1)) must_== "abc"
}
}
}
[信息] Mockito 应该
[info] + 带有参数值的正确存根
[信息]!使用参数匹配器正确存根
[错误] NullPointerException:(MockitoIDStubTest.scala:20)
[错误] MockitoIDStubTest$$anonfun$1$$anonfun$apply$5$$anonfun$apply$6.apply(MockitoIDStubTest.scala:20)