如何使用 Mockito 模拟 returns 值 class 实例的函数?
How to mock a function that returns a value class instance with Mockito?
我正在尝试模拟一个方法,该方法 return 是一个值 class (extends AnyVal
) 的实例
我收到了一些奇怪的错误消息,我理解(因为值 class 擦除)但我很惊讶 Mockito 无法应对。
我的class:
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
但是当然,如果我将它 return 设为字符串,它就不会再编译了...
如果我删除 extends AnyVal
,当然可以正常工作。
好的,我找到了有效的答案。
我需要使用 doReturn
的旧 mockito 样式
doReturn(returned.value).when(theMock).something("test")
因为它不是类型安全的,所以它可以工作。
虽然不完全令人满意,因为我放弃了类型安全。
我正在尝试模拟一个方法,该方法 return 是一个值 class (extends AnyVal
) 的实例
我收到了一些奇怪的错误消息,我理解(因为值 class 擦除)但我很惊讶 Mockito 无法应对。
我的class:
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
但是当然,如果我将它 return 设为字符串,它就不会再编译了...
如果我删除 extends AnyVal
,当然可以正常工作。
好的,我找到了有效的答案。
我需要使用 doReturn
doReturn(returned.value).when(theMock).something("test")
因为它不是类型安全的,所以它可以工作。 虽然不完全令人满意,因为我放弃了类型安全。