H S*_*har 0 scala mocking mockito powermock scalamock
我想测试我的代码,它具有一些尾部递归函数。我无法嘲笑尾部递归函数,因为它们需要声明Finalor Private。大多数模拟框架不支持模拟此类方法,而那些支持的方法则无法按预期工作。
这有可能吗?有人可以给我他们的想法来模拟尾部递归函数吗?
我尝试使用MockitoFramework版本进行模拟3.0.0。我的测试套件具有该Mockito-Sugar特性。
尽管Mockito 文档建议可以模拟最终方法,但对我而言却是失败的。
我尝试使用scala-mock。我遇到了其他问题,但没有解决。
解决此问题的一种方法是将递归代码包装在外部函数中。例如:
def factorial(n: Int): Int = {
@annotation.tailrec
def loop(i: Int, res: Int): Int =
if (i <= 1) {
res
} else {
loop(i-1, i*res)
}
loop(n-1, n)
}
Run Code Online (Sandbox Code Playgroud)
使用这种模式的factorial方法并不需要是final或private,因此它可以被覆盖测试。
这种模式的另一个优点是,res不必在主功能界面中公开累加器值。这种模式还允许特殊情况在主递归代码之外进行处理,从而使内部代码更简单并且可能更快。
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |