我使用Scala的2.10,specs2和的Mockito。 我想嘲笑scala.io.Source.fromURL()。 这个问题似乎是fromURL()是一个功能io.Source的对象 。
val m = mock[io.Source]
m.fromURL returns io.Source.fromString("Some random string.")
这是在单元测试一个非常简单的模仿。 为什么不工作?
谢谢!
我使用Scala的2.10,specs2和的Mockito。 我想嘲笑scala.io.Source.fromURL()。 这个问题似乎是fromURL()是一个功能io.Source的对象 。
val m = mock[io.Source]
m.fromURL returns io.Source.fromString("Some random string.")
这是在单元测试一个非常简单的模仿。 为什么不工作?
谢谢!
相反,它嘲笑的,你可以尝试spying
,如下所示:
val m = spy(io.Source)
或者你如下可以嘲笑它:
val m = mock[io.Source.type]
但后来你是如何使用Source
在你测试的类? 如果你有一个例子类,如下所示:
class MyClass{
def foo = {
io.Source.doSomething //I know doSomething is not on Source, call not important
}
}
然后,为了充分利用嘲弄/间谍活动,你必须构造你的类,如下所示:
class MyClass{
val source = io.Source
def foo = {
source.doSomething
}
}
然后你的测试必须是这个样子:
val mockSource = mock[io.Source.type]
val toTest = new MyClass{
override val source = mockSource
}
在Java世界中,静态方法是嘲讽的祸根。 在斯卡拉世界,调用对象也可能是麻烦的处理单元测试。 但是,如果你按照上面的代码中,你应该能够正确地模拟出基于对象的依赖在你的类。