每当创建类的新对象时,我都试图返回一个对象。
我尝试过使用带有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) }
请参见教程。