scala - uso - El método Mockito stubbing con argumento de clase de valor falla con NullPointerException
test unitarios junit mockito (1)
Parece que funciona con scalamock y Scalatest . Todavía me gustaría encontrar una solución para Mockito, así que no tengo que cambiar unos cientos de pruebas.
import org.scalatest._
import org.scalamock.scalatest.MockFactory
case class ID[T](val id:Long) extends AnyVal
trait DAO[T]{
def get(id:ID[T]):T
}
class ScalaMockIDStubTest extends WordSpec with MockFactory{
import language.postfixOps
"ScalaMock" should{
"properly stub with argument value" in {
val m = stub[DAO[String]
(m.get _) when(ID[String](1)) returns("abc")
assert( m.get(ID[String](1)) == "abc")
}
"properly stub with argument matcher" in {
val m = stub[DAO[String]
(m.get _) when(*) returns("abc")
assert( m.get(ID[String](1)) == "abc")
}
}
}
El uso de clases de valores tipados como ID es un patrón común en Scala. Sin embargo, parece que Mockito tiene un problema al anotar métodos que toman clases de valor como argumentos. En el siguiente ejemplo, el primer apéndice, con un valor real, funciona bien, pero el segundo, que utiliza un apostador de argumentos, arroja NullPointerException.
La única referencia a esto que he encontrado es esta pregunta, pero la solución que se muestra allí no funciona. ¿Alguien sabe una solución a esto, o una solución alternativa?
Las versiones son: org.mockito: mockito-all: 1.10.19 y 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"
}
}
}
[info] Mockito debería
[info] + talón apropiado con valor de argumento
[info]! resbalar correctamente con argumento matcher
[error] NullPointerException: (MockitoIDStubTest.scala: 20)
[error] MockitoIDStubTest $$ anonfun $ 1 $$ anonfun $ apply $ 5 $$ anonfun $ apply $ 6.apply (MockitoIDStubTest.scala: 20)