繁体   English   中英

MockK的spyk如何覆盖构造函数?

[英]MockK's spyk how to overwrite constructor?

我目前正在尝试将类作为间谍对象进行测试,这些对象通常会在构造函数中初始化数据库连接。 该类的简化版本如下所示。

class classToTest(){
    val connection:Connection

    init {
        connection = DatabaseConnection(url="127.0.0.1")
    }

    fun methodA():Int{
       return 3
    }
}

现在,我尝试以以下方式(简化)测试我的classToTest的方法。

class TestClass(){
    var connection = mockk<DatabaseConnection>()
    var dbh = spyk(ClassToTest())

    @Test
    fun testMethodA(){
       assertEquals(dbh.methodA,3)
    }
}

现在的问题是我的测试无法启动,因为我不知道如何覆盖可能使用连接模拟而不是初始化连接对象的init函数。 感谢帮助。

我认为没有办法模拟间谍的init函数。

我建议您使用构造函数来传递连接实例。

class ClassToTest(val connection: Connection) {
    ...
}

然后在您的测试中,模拟连接非常容易。

class TestClass(){
    private val dbh = ClassToTest(mockk())

    @Test
    fun testMethodA() {
       assertEquals(dbh.methodA, 3)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM