Mockk :同时模拟多个接口

xle*_*ier 3 kotlin mockk

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

在某些时候,我必须创建一个实现 2 个接口的模拟。

例如,在 C# 中使用 Moq,我可以这样做:

// 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());
Run Code Online (Sandbox Code Playgroud)

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

如果我尝试类似的事情

val foo : IFoo = mockk()
every { (foo as AutoCloseable).close() } just Runs
Run Code Online (Sandbox Code Playgroud)

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

com.example.IFoo$Subclass0 cannot be cast to java.lang.AutoCloseable
Run Code Online (Sandbox Code Playgroud)

我在文档中看到我可以使用 指定其他接口spyk,但我不想在这里使用实际的实现。

有没有办法做到这一点 ?还有另一种方法吗?

小智 10

可以通过moreInterfaces参数实现。

文档中的示例spykmockk还应该与:

val spy = spyk(System.out, moreInterfaces = *arrayOf(Runnable::class))
Run Code Online (Sandbox Code Playgroud)