仅供参考:我目前正在使用 Mockk-1.12.4 和 Kotlin-1.6
我有一个返回类型 T 的对象的扩展方法:
fun <T> Entity.selectReferenceAsSingleObject(referenceName: String): T {
return this.selectReferencesByName(referenceName).single().asObjet() as T
}
Run Code Online (Sandbox Code Playgroud)
它被定义为 Extentions.kt 文件中的顶级函数(因此不是一个类)。我想通过使用mockkStatic 用 MockK 来模拟这个
mockkStatic(Entity::selectReferenceAsOptionalSingleObject)
Run Code Online (Sandbox Code Playgroud)
但是我收到错误:
Not enough information to infer type variable T
Run Code Online (Sandbox Code Playgroud)
因为它无法确定我应该嘲笑什么类型。我尝试在很多地方添加类型参数
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)
Run Code Online (Sandbox Code Playgroud)
但没有任何作用,它要么告诉我同样的错误,要么告诉我那里不允许类型参数。我不确定我需要做什么来修复我的语法,因为 IntelliJ 没有给我任何提示,所以我感觉有点卡住了。任何帮助,将不胜感激。
小智 2
尝试这个:
mockkStatic("your.package.YourFileExtensionKt")
Run Code Online (Sandbox Code Playgroud)
您还可以给该文件起一个好听的名称:
@file:JvmName("Extension")
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
mockkStatic("your.package.Extension")
Run Code Online (Sandbox Code Playgroud)
无论如何,要使测试正常工作,您必须在扩展类中使用模拟,在本例中为实体,它看起来像这样:
@Test
fun test() {
val entity : Entity = mockk(relaxed = true)
every { entity.selectReferenceAsSingleObject<Any>(any()) } returns "whatever"
val result = entity.selectReferenceAsSingleObject<Any>("test")
assertEquals("whatever", result)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1134 次 |
| 最近记录: |