kotlin - 模拟 : Mock more than one interface at the same time

标签 kotlin mockk

我正在尝试使用 Mockk 模拟一些接口(interface)。

有时,我必须创建一个实现 2 个接口(interface)的模拟。

例如,在 C# 中使用 Moq,我可以做到 that :

// implementing multiple interfaces in mock
var foo = new Mock<IFoo>();
var disposableFoo = foo.As<IDisposable>();
// now IFoo mock also implements IDisposable :)
disposableFoo.Setup(df => df.Dispose());

有没有办法用 Mockk 做到这一点?

如果我尝试类似的东西

val foo : IFoo = mockk()
every { (foo as AutoCloseable).close() } just Runs

我收到以下错误(这是有道理的):

com.example.IFoo$Subclass0 cannot be cast to java.lang.AutoCloseable

我在文档中看到我可以使用 spyk 指定额外的接口(interface),但我不想在这里使用实际的实现。

有办法吗?还有其他方法吗?

最佳答案

可以通过 moreInterfaces 参数实现。

spyk 文档中的示例。也应该与 mockk 一起工作:

val spy = spyk(System.out, moreInterfaces = *arrayOf(Runnable::class))

关于kotlin - 模拟 : Mock more than one interface at the same time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62412920/

相关文章:

kotlin - 如何部分验证数据类作为函数参数?

android - 如何比较或验证不覆盖 equals 方法的对象?

spring - java.lang.IllegalStateException(未找到方法) : Calling MockMvc. 使用自定义 Filter 在一次测试中执行多次

java - 有没有办法在 Kotlinx-Serialization 中序列化 map

kotlin - 在CORDA中动态部署和运行节点

kotlin - 无法使用Mockk模拟com.github.kittinunf.fuel.Fuel

android - 如何使用 mockk 库模拟 android 上下文

kotlin - 在 Kotlin 中创建一个带有枚举参数的函数

android - 从Kotlin Android中的Application变量创建单独的ArrayList

kotlin - 为什么 mock 在 Kotlin 中启动如此缓慢?