Używam programu mockito ze skalatyą. Mam następujący problem podczas używania Matchera z klasą wartości.Mockito matchers, klasa wartości scala i wyjątek NullPointerException
import org.scalatest.FlatSpec
import org.scalatest.mock.MockitoSugar
import org.mockito.BDDMockito._
import org.mockito.Matchers.any
case class FirstId(val value: String) extends AnyVal
case class SecondId(val value: String) extends AnyVal
trait MockedClass {
def someMethods(firstId: FirstId, secondId: SecondId): Int
}
class ValueClassSpec() extends FlatSpec with MockitoSugar {
val mockedClass = mock[MockedClass]
val secondId = SecondId("secondId")
"Matchers" should "work for value class" in {
// given
given(mockedClass.someMethods(any[FirstId], org.mockito.Matchers.eq(secondId))).willReturn(3)
// when
val result = mockedClass.someMethods(FirstId("firstId"), secondId)
// then
assert(result == 3)
}
}
a wynik jest:
ValueClassSpec:
Matchers
- should work for value class *** FAILED ***
java.lang.NullPointerException:
at io.scalac.fow.party.ValueClassSpec$$anonfun$1.apply$mcV$sp(ValueClassSpec.scala:22)
at io.scalac.fow.party.ValueClassSpec$$anonfun$1.apply(ValueClassSpec.scala:20)
at io.scalac.fow.party.ValueClassSpec$$anonfun$1.apply(ValueClassSpec.scala:20)
at org.scalatest.Transformer$$anonfun$apply$1.apply(Transformer.scala:22)
at org.scalatest.Transformer$$anonfun$apply$1.apply(Transformer.scala:22)
at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)
at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
at org.scalatest.Transformer.apply(Transformer.scala:22)
at org.scalatest.Transformer.apply(Transformer.scala:20)
at org.scalatest.FlatSpecLike$$anon$1.apply(FlatSpecLike.scala:1639)
...
Znalazłem podobne pytanie (Scala Value classes and Mockito Matchers don't play together), ale bez żadnej rady.
Czy istnieje możliwość używania mockito z klasą wartości scala?
Lib wersje: scala 2.11.2, 1.10.8, Mockito scalatest 2.1.6
afaik 'any' i' eq' nie mogą być używane razem. – Ashalynd
@Ashalynd - z [dokumentacji Mockito] (http://mockito.github.io/mockito/docs/current/org/mockito/Mockito.html): ** Ostrzeżenie dotyczące argumentów matematycznych: ** Jeśli używasz argument matematyczny, wszystkie argumenty muszą być dostarczone przez matmasterów. E.g: (przykład pokazuje weryfikację, ale to samo dotyczy stubowania): weryfikuj (udawaj) .someMethod (anyInt(), anyString(), eq ("trzeci argument")); // powyższe jest poprawne - eq() jest również argumentem matcher –