我想在Scala中使用Mockito(确切地说是Specs2)来存储一个返回AnyVal的函数,但它不能正常工作:
import org.specs2.mutable._
import org.specs2.mock._
case class V(s: String) extends AnyVal
class A {
def f: V = new V("Hello")
}
class Sample extends Specification with Mockito {
"Mockito" should {
"mock A" in {
val a = mock[A]
a.f returns new V("hoge")
a.f match {
case V("hoge") => success
case _ => failure
}
}
}
}
这失败了:
V cannot be returned by f()
f() should return String
我使用marker接口/ trait找到了一种解决方法(基于我在上面提供的代码片段): https://gist.github.com/mtgto/9251779
但这不是我的任何解决方案,因此它会更改返回的类型(因为模拟/测试库问题)。
之前有人见过这个并知道如何存根这样的功能吗?
答案 0 :(得分:6)
我找到了一种简化此功能的方法 - 使用原始的Mockito的doReturn与底层的AnyVal类型(在本例中为String)而不是AnyVal本身,所以:
org.mockito.Mockito.doReturn("hoge").when(a).f
而不是:
a.f returns new V("hoge")