如何模拟在Scala/Specs2中使用Mockito返回AnyVal的函数?

Mic*_*ski 6 scala mockito specs2

我想在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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这失败了:

V cannot be returned by f()
f() should return String
Run Code Online (Sandbox Code Playgroud)

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

但这对我来说不是任何解决方案,因此它会更改返回类型(因为模拟/测试库问题).

以前任何人都看过这个并且知道如何存根这样的功能?

Mic*_*ski 6

我发现了一种简化此功能的方法 - 使用原始的Mockito的doReturn与底层AnyVal的类型(在本例中为String)而不是AnyVal本身,所以:

org.mockito.Mockito.doReturn("hoge").when(a).f
Run Code Online (Sandbox Code Playgroud)

代替:

a.f returns new V("hoge")
Run Code Online (Sandbox Code Playgroud)