有人可以帮助我弄清楚如何对以下代码进行有效的单元测试。它的kotlin,但可以是任何东西:
myMainObject.doSomethingSpecial({ differentObject ->
differentObject.doFirst()
differentObject.doSecond()
differentObject.doThird()
})
我想测试doSomethingSpecial确实有效。
我想过要模拟lambda:
val function1: () -> Int = mock()
whenever(function1.invoke())
.thenReturn(1)
但这不是我真正想要的。我想测试lamda中的所有方法都被调用,所以我想测试 doFirst,doSecond,doThird 等都被调用,我认为这是最好的单元测试方法。我有为此使用参数捕获吗?明确地说,我的问题是如何对方法doSomethingSpecial进行单元测试?
最佳答案
您可以尝试将问题分为两个简单的问题:
doSomethingSpecial
(我想称它为接收参数的函数),并通过一个伪函数作为参数进行测试,并将其称为differentObject
并通过模拟进行了测试,并将测试模拟的方法称为因此,用伪代码:
val myFunction = { differentObject ->
differentObject.doFirst()
differentObject.doSecond()
differentObject.doThird()
differentObject.doFourth()
differentObject.doFifth()
}
myMainObject.doSomethingSpecial(myFunction)
// Invoke doSomethingSpecial with fake parameter
val fakeFunction = ...
myMainObject.doSomethingSpecial(fakeFunction)
// Assert fakeFunction was called
// Invoke myFunction with mock parameter
val mockObject = ...
myFunction(mockObject)
// Assert mockObject.doNth was called
我希望这种方法可以帮助您找到真正的解决方案!
关于unit-testing - 单元测试-如何测试采用lambda函数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54811098/