2
我试图嘲笑一种方法,返回一个值类的实例(extends AnyVal
) 我收到了一些奇怪的错误消息,我明白(因为值类删除),但我很惊讶Mockito没有应付那个。如何模拟一个返回值为Mockito的类实例的函数?
我的类:
case class MyValueClass(value: String) extends AnyVal
我想嘲笑功能:
trait ToMock {
def something(someParams: String): MyValueClass
}
而且模拟:
val theMock = mock[ToMock]
val returned = MyValueClass("test")
when(theMock.something("test")).thenReturn(returned)
此代码生成以下错误:
MyValueClass cannot be returned by something()
something() should return String
不过,当然,如果我做它返回一个字符串,它不会再编译...
如果我删除extends AnyVal
,当然它工作正常。
Mockito给出关于您的Scala类型的“zip”。我会通过首先检查字节码文件中的内容来使用javap来理解该方法的* true *签名。要确定你的scala-perception符合Mockito用于做出决定的内容。 – GhostCat
这就是问题:编译Scala需要MyValueClass,但当然是因为它是一个值类,它在字节码上被擦除,所以在运行时,mockito需要包装值(在我的例子中是一个String)。我只是在寻找解决方法。 – Guillaume
找到了方法,看到我的回答如下 – Guillaume