MockK 的 spyk 如何覆盖构造函数?
MockK's spyk how to overwrite constructor?
我目前尝试将 class 作为间谍对象进行测试,该对象通常会在构造函数中初始化数据库连接。 class 的简化版本如下所示。
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)
}
}
我目前尝试将 class 作为间谍对象进行测试,该对象通常会在构造函数中初始化数据库连接。 class 的简化版本如下所示。
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)
}
}