【问题标题】:MockK mock method returning Interface FutureMockK 模拟方法返回接口未来
【发布时间】:2019-01-21 10:00:57
【问题描述】:

您好,我有以下问题。 我正在尝试模拟注入执行者的调用 立即执行给定的 Callable。稍后在 Callable 内部调用的方法的测试参数被捕获并断言参数。模拟示例见下文。

Maven 3、jdk 10-slim、mock 1.9

    //this task should be executed by executor
    private val taskCaptor = slot<Callable<Boolean>>()
    private val asyncTaskExecutor: LazyTraceThreadPoolTaskExecutor = mockk<LazyTraceThreadPoolTaskExecutor>().apply {
        //this was my 1st try, but resutt was java.lang.InstantiationError: java.util.concurrent.Callable
        //every { submit(capture(taskCaptor)) } returns CompletableFuture.completedFuture(taskCaptor.captured.call())
        //every { submit(any()) } returns CompletableFuture.completedFuture(true)
        every { submit(ofType(Callable::class)) } returns FutureTask<Boolean>(Callable { true })
    }

后来我将 Callable 接口更改为实现,我在测试类中创建了它,但又遇到了另一个异常。 与上述异常相同的代码是

java.lang.InstantiationError: java.util.concurrent.Future

这是submit方法的返回类型。

我的嘲讽方法有问题吗?

【问题讨论】:

  • 看起来是个bug,欢迎提交gh issue
  • 也许你需要answers 来获取槽值

标签: kotlin mockk


【解决方案1】:

不确定这是否是最好的实现方式,但对我来说它是这样工作的:

    private val taskCaptor = slot<Callable<Boolean>>()
    private val asyncTaskExecutor: LazyTraceThreadPoolTaskExecutor = mockk<LazyTraceThreadPoolTaskExecutor>().apply {
        every { submit(ofType(Callable::class)) } returns mockFuture
        every { mockFuture.get() } returns true

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多