如何模拟 Kotlin 单例对象?

2024-02-19

给定一个 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(使用前将#替换为@)

如何模拟 Kotlin 单例对象? 的相关文章

随机推荐