我正在尝试使用mock anyConstructed,但在每个{..}块中都以Missing调用结束



每当创建类的新对象时,我都试图返回一个对象。

我尝试过使用带有spyk甚至PredictionCheckFunction 的mock对象的anyConstructed

every { anyConstructed<PredictionCheckFunction>() } answers { predictionCheckFunction }

这会在上述线路上导致以下错误

io.mockk.MockKException: Missing calls inside every { ... } block.

在Mockito,我会做一些类似的事情

whenNew(PredictionCheckFunction.class).withNoArguments().thenReturn(predictionCheckFunction);

我想确保每次创建PredictionCheckFunction都会产生一个predictionCheckFunction对象

这个问题中的例子如何使用mock模拟一个新对象允许我只在模拟对象上运行一个函数,而不返回一个已经创建的函数,就像上面的Mockito例子thenReturn(predictionCheckFunction);-

参考SO问题-中的示例

mockkConstructor(Dog::class)
every { anyConstructed<Dog>().bark() }

在创建新对象时,如有任何关于如何做到这一点的帮助,我们将不胜感激。

根据官方教程,我们似乎无法将mock实例分配给任何构造的类实例,如:

mockkConstructor(TargetCls::class)
every { anyConstructed<TargetCls>() } returns mockk()

没有像上面代码那样的示例用法。这将是一个例外。。。

然而,正如官方教程所说,你可以这样写:

class MockCls {
fun add(a: Int, b: Int) = a + b
}
mockkConstructor(MockCls::class)
every { anyConstructed<MockCls>().add(1, 2) } returns 4
assertEquals(4, MockCls().add(1, 2)) // note new object is created
verify { anyConstructed<MockCls>().add(1, 2) }

请参见教程。

最新更新