when uso usar unitarios test mock datos como scala nullpointerexception mockito specs2 value-class

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)