scala - 如何做非专业类型有接受 Function1 的方法?
问题描述
我有以下课程:
class Elem[T](t: T){
def doSome(f: T => Unit):Unit = f(t)
}
所以我想测试给定Elem
实例的函数调用(我正在使用 mockito)。运行测试时
val f = mock(classOf[Int => Unit])
new Elem(1).doSome(f)
verify(f).apply(1)
我得到以下异常:
Wanted but not invoked:
function1.apply$mcVI$sp(1);
However, there was exactly 1 interaction with this mock:
function1.apply(1);
这是合理的,因为Function1
它专门用于Int
. 所以使测试为
val f = mock(classOf[AnyRef => Unit])
new Elem(1.asInstanceOf[AnyRef]).doSome(f)
verify(f).apply(1.asInstanceOf[AnyRef])
工作正常。
有没有办法避免这种丑陋的演员阵容AnyRef
?也许还有比 mockito 更适合这种情况的工具?
解决方案
这是强制编译器使用非专业泛型的一种方法apply
:
def verifyGenericApply[X, Y](f: X => Y, x: X): Unit = {
verify(f).apply(x)
}
"Int function" should "invoke non-specialized apply" in {
class Elem[T](t: T){
def doSome(f: T => Unit):Unit = f(t)
}
val f = mock(classOf[Int => Unit])
new Elem(1).doSome(f)
verifyGenericApply(f, 1)
}
我不够熟悉,mockito
无法保证这是惯用的,虽然......
推荐阅读
- button - SwiftUI 破坏性按钮样式
- android - 自定义后的材质复选框样式
- events - 从事件驱动架构中的微服务获取信息
- sql - 使用 NVARCHAR 序列更新主键
- bash - Openvpn 无法通过基于用户的脚本发送 cURL 请求
- javascript - 如何过滤 django x chart.js 图表?未捕获的类型错误
- javascript - @@iterator- Javascript - 它到底是什么?
- bluetooth-lowenergy - 无法检索 iBeacon UUID(ESP32 BLE 扫描仪)
- android - 如何在 ionic 4 上修复 android 版本 9 的 CORS 问题
- python - 不手动输入名称时无法从页面获取源代码