我试图模拟一个返回值类实例的方法(extends AnyVal
)
我得到了一些奇怪的错误信息,我明白了(因为价值等级擦除),但我很惊讶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
,当然可以正常使用。
答案 0 :(得分:2)
好的,我找到了一个有效的答案。
我需要使用doReturn
doReturn(returned.value).when(theMock).something("test")
因为它不是类型安全的,所以它有效。 但并不完全令人满意,因为我放弃了类型安全。