Korzystanie Klasy wartości Scala z Mockito kpi (dopasowujących) rezultaty w formie NullPointerException, patrz poniższy przykład:klasy Scala Wartość i Mockito dopasowujących nie grają razem
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)
}
}
Skutkuje:
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)
Jakieś wskazówki, co można tutaj zrobić?
Jak dowiedział się teraz, to dzieje się na "Matchers.eq (id)" jako Mockito próbuje ustalić domyślną wartość dla klasy wartości Id, która ma wartość null, ponieważ w czasie wykonywania rozszerza java.lang.Object, a wartość domyślna dla obiektów ma wartość null. Z drugiej strony kompilator chce mieć "prymitywne int", aby "zapakować" w scala.Int – longliveenduro