给定一个 Kotlin 单例对象和一个调用它的方法的 fun
object SomeObject {
fun someFun() {}
}
fun callerFun() {
SomeObject.someFun()
}
有没有办法模拟调用SomeObject.someFun()
?
Kotlin 有一个非常好的模拟库 -Mockk http://mockk.io/,它允许您以您想要的方式模拟对象。
根据其文档:
对象可以通过以下方式转换为模拟:
object MockObj {
fun add(a: Int, b: Int) = a + b
}
mockkObject(MockObj) // aplies mocking to an Object
assertEquals(3, MockObj.add(1, 2))
every { MockObj.add(1, 2) } returns 55
assertEquals(55, MockObj.add(1, 2))
要恢复回来,请使用 unmockkAll 或 unmockkObject:
@Before
fun beforeTests() {
mockkObject(MockObj)
every { MockObj.add(1,2) } returns 55
}
@Test
fun willUseMockBehaviour() {
assertEquals(55, MockObj.add(1,2))
}
@After
fun afterTests() {
unmockkAll()
// or unmockkObject(MockObj)
}
尽管 Kotlin 语言有限制,如果测试逻辑需要,您可以创建新的对象实例:
val newObjectMock = mockk<MockObj>()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)