Mit Scala Wertklassen mit Mockito Mocks (Matcher) führt zu einer Nullpointer finden Sie in diesem Beispiel:Scala Wertklassen und Mockito Matchers nicht spielen zusammen
import org.scalatest.FunSuite
import org.scalatest.mock.MockitoSugar._
import org.mockito.{Matchers, Mockito}
class Id(val underlying: Int) extends AnyVal
class MockitoValueClassSuite extends FunSuite {
trait Sample {
def doIt(id: Id) : Int
}
test("Check value classes in scala with mockito") {
val sampleMock = mock[Sample]
val id = new Id(1)
Mockito.when(sampleMock.doIt(Matchers.eq(id))).thenReturn(5)
assert(sampleMock.doIt(id) == 5)
}
}
Ergebnisse in:
java.lang.NullPointerException was thrown.
java.lang.NullPointerException
at net.gutefrage.service.user.service.MockitoValueClassSuite$$anonfun$1.apply$mcV$sp(MockitoValueClassSuite.scala:21)
at net.gutefrage.service.user.service.MockitoValueClassSuite$$anonfun$1.apply(MockitoValueClassSuite.scala:16)
at net.gutefrage.service.user.service.MockitoValueClassSuite$$anonfun$1.apply(MockitoValueClassSuite.scala:16)
at org.scalatest.Transformer$$anonfun$apply$1.apply(Transformer.scala:22)
Irgendwelche Hinweise, was hier gemacht werden kann?
Wie ich jetzt herausgefunden, es auf "Matchers.eq (id)", wie Mockito geschieht versucht, einen Standardwert für die Id-Wertklasse zu ermitteln, die null ist, da sie zur Laufzeit java.lang.Object erweitert und der Standardwert für Objects null ist. Der Compiler dagegen möchte ein "primitives int" haben, um in eine scala.Int zu "boxen" – longliveenduro