给出一个模拟:
val myMock = mock[SomeClass]
我正在尝试设置它,以便模拟返回各种类型的默认值。例如。对于返回String
的内容,它将返回""
。
我发现RETURNS_SMART_NULLS
看起来像是适用于像String这样的基本返回类型。以下是我在Scala / Specs2中使用它的方法:
val myMock = mock[SomeClass].settings(smart = true)
现在问题:因为我使用Scala,我的代码/ API不返回空值但返回Option值。所以我要做的是让mock默认返回Option返回类型的非null值:None
(首选)或Some[T]
其中T是容器中的类型(如果它的字符串,然后是Some("")
)。
例如,如果SomeClass
的属性address
属于Option[String]
,那么如何在调用None
时将mockito配置为返回myMock.address
而不是null 。这些空值导致下游错误。
注意,不是一个可行的解决方案,我可以专门模拟这些个别调用的每个的行为(例如:myMock.address returns None
)
答案 0 :(得分:2)
我能够测试这个课程:
class Timers(i: Int, s: String) {
def returnOption: Option[Int] = Some(i)
def returnString: String = s
}
进行此测试:
import org.specs2.mutable.Specification
import org.junit.runner.RunWith
import org.specs2.runner.JUnitRunner
import org.mockito.Mockito._
import org.mockito.stubbing.Answer
import org.mockito.invocation.InvocationOnMock
@RunWith(classOf[JUnitRunner])
class TimersSpec extends Specification {
val m = mock(classOf[Timers], new Answer[Any]() {
def answer(inv: InvocationOnMock) = {
inv.getMethod.getReturnType match {
case c if c == classOf[Option[_]] => None
case c if c == classOf[String] => ""
case _ => null
}
}
})
"A mock timer" should {
"return a None" in {
m.returnOption must beNone
}
"return a empty string" in {
m.returnString mustEqual ""
}
}
}