Mockk: имитируйте более одного интерфейса одновременно - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь имитировать некоторые интерфейсы с помощью Mockk.

В какой-то момент мне нужно создать макет, реализующий 2 интерфейса.

Например, используя Moq в C# , Я могу сделать это :

// 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, но я не хочу использовать здесь реальную реализацию.

Есть способ сделать это? Есть ли другой подход?

1 Ответ

1 голос
/ 17 июня 2020

Возможно с параметром moreInterfaces.

Пример из документации с spyk. Также должен работать с mockk:

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