我正在使用 Scala 2.10、specs2 和 Mockito。我想模拟 scala.io.Source.fromURL()。问题似乎是 fromURL() 是一个函数io.Source 的对象 http://www.scala-lang.org/api/current/index.html#scala.io.Source%24.
val m = mock[io.Source]
m.fromURL returns io.Source.fromString("Some random string.")
这是单元测试中非常简单的模拟。为什么它不起作用?
Thanks!
你可以尝试而不是嘲笑它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 世界中,静态方法是模拟的祸根。在 Scala 世界中,对于单元测试来说,处理对象调用也很麻烦。但是如果您遵循上面的代码,您应该能够在您的类中正确模拟基于对象的依赖关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)