仅供参考:我目前使用的是Mockk-1.12.4和Kotlin-1.6
我有一个扩展方法,它返回一个类型为T的对象:
fun <T> Entity.selectReferenceAsSingleObject(referenceName: String): T {
return this.selectReferencesByName(referenceName).single().asObjet() as T
}
这在Extensions.kt文件中被定义为顶级函数(所以不是类)。我想使用mockStatic在MockK中模拟它
mockkStatic(Entity::selectReferenceAsOptionalSingleObject)
但是我得到错误:
Not enough information to infer type variable T
因为它无法计算出我应该模拟什么类型。我试过在很多地方添加类型参数
mockkStatic<KFunction<MyType>>(Entity::selectReferenceAsSingleObject)
mockkStatic<MyType>(Entity::selectReferenceAsSingleObject)
mockkStatic(Entity<KFunction<MyType>>::selectReferenceAsSingleObject)
mockkStatic(Entity<MyType>::selectReferenceAsSingleObject)
mockkStatic(Entity::<KFunction<MyType>>selectReferenceAsSingleObject)
mockkStatic(Entity::<MyType>selectReferenceAsSingleObject)
mockkStatic(Entity::selectReferenceAsSingleObject<KFunction<MyType>>)
mockkStatic(Entity::selectReferenceAsSingleObject<MyType>)
mockkStatic(Entity::selectReferenceAsSingleObject as KFunction<MyType>)
mockkStatic(Entity::selectReferenceAsSingleObject as MyType)
但是没有任何效果,它要么告诉我同样的错误,要么告诉我类型参数是不允许的。我不知道我需要做什么来修复我的语法,因为IntelliJ没有给我任何提示,所以我觉得有点卡住了。任何帮助将不胜感激。
2条答案
按热度按时间mitkmikd1#
试试这个:
你也可以给予文件一个好名字:
会是这样的
无论如何,为了让测试工作,你必须在扩展类中使用一个mock,在这个例子中是Entity,它看起来像这样:
bihw5rsg2#
必须注意以下几点:
如果您的Kotlin文件是.package.yourFileExtension.kt,那么mockkStatic应该如下所示:
Kt由Kotlin编译器自动添加为后缀