使用scala中的mockito模拟隐式选项

时间:2017-10-17 14:01:51

标签: json scala mocking mockito scalatest

我有一个由一些选项组成的案例类。让我们说

case class Clazz(field: Option[String] = None)

我试图在最新的规范中模拟这个类来传递给另一个函数。像...

val clazz = mock[Clazz]

它使字段成为null

后来这个clazz被序列化为带有circe.io库的JSON,当然它会触发错误:scala.MatchError: null。因为它希望选项为SomeNone

所以我的问题是......如何强制mockito对选项使用None而不是null。好像它需要一些隐含的东西。

或者可能是完全不同的方法?

谢谢!

2 个答案:

答案 0 :(得分:0)

请参阅:Mocking default values for return types with mockito + specs2

在ScalaTest中,使用org.scalatest.mockito.MockitoSugar语法如下:

val mockEth = mock[Clazz](new Answer[Any] { ... } )

答案 1 :(得分:0)

你必须定义什么是答案。至少我不知道mockito中的这种内置功能。当您的测试类扩展org.scalatest.mockito.MockitoSugar

时,可以通过这种方式完成
// Configurated mock
val clazzMock = mock[Clazz]
when(clazzMock.field).thenReturn(None)
println(s"Configurated mock. Field: ${clazzMock.field}")

// Non-configurated mock
println(s"Non-configuarted mock. Field: ${mock[Clazz].field}")