如何在Scala / Specs2中模拟返回AnyVal的函数



我想存根一个函数返回AnyVal使用Mockito在Scala (Specs2准确),但它不缝工作:

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

我找到了一种使用标记接口/trait的解决方案(基于我提供的上面的代码片段):https://gist.github.com/mtgto/9251779

但这对我来说不是任何解决方案,因此它改变了返回类型(因为mock/test库问题)。

有人见过这个,知道如何存根这样的函数吗?

我找到了一种方法来存根这个函数-使用原始Mockito的doReturn与底层AnyVal的类型(在这种情况下是String)而不是AnyVal本身,所以:

org.mockito.Mockito.doReturn("hoge").when(a).f

代替:

a.f returns new V("hoge")

相关内容

  • 没有找到相关文章

最新更新