所以我有以下代码
class MetricsLogger {
def measure[T](name:String)(operation: => T): T = {
val startTime = System.currentTimeMillis
val result = try {
operation
} finally {
logMetric(Metric(name, System.currentTimeMillis - startTime, StandardUnit.Milliseconds))
}
result
}
}
其中log Metric是某种副作用(例如,将指标上传到cloudwatch)。
现在我这样做
def measuredOp = measure("metricName") { someOperation }
这里有一些操作正在进行一些网络调用。
现在我必须存根测量操作。
所以我的存根如下: -
val loggingMetrics = mock[MetricsLogger] // mock is from MockitoSugar trait
和我的存根就像
Mockito.when(loggingMetrics.measure(Matchers.anyString())(Matchers.anyObject())).thenReturn(???)
显然我的存根是错误的,但我无法弄清楚如何正确存根。
答案 0 :(得分:0)
Mockito不支持将其作为副名称参数,这是Java中不存在的概念,但是mockito-scala确实从0.4.0版本开始支持(尝试0.4.0或0.4.2,忽略0.4.1)
我只是像这样进行快速测试
import org.mockito.{ MockitoSugar, ArgumentMatchersSugar }
class StackOverflowTest extends WordSpec with MockitoSugar with scalatest.Matchers with ArgumentMatchersSugar {
"mock[T]" should {
"it should work with by-name params" in {
val loggingMetrics = mock[MetricsLogger]
when(loggingMetrics.measure(any)(any)).thenReturn("it worked!")
loggingMetrics.measure("test")("") shouldBe "it worked!"
}
}
}
免责声明:我是该库的维护者,尽管它是Mockito官方套件的一部分