gpt4 book ai didi

scala - Scala中对象的Mockito

转载 作者:行者123 更新时间:2023-12-04 01:40:02 25 4
gpt4 key购买 nike

我正在使用Scala 2.10,specs2和Mockito。我想模拟scala.io.Source.fromURL()。问题似乎是fromURL()是io.Source's object中的一个函数。

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世界中,静态方法是模拟的祸根。在Scala世界中,对对象的调用在进行单元测试时也很麻烦。但是,如果您遵循上面的代码,则应该能够在类中正确模拟出基于对象的依赖关系。

关于scala - Scala中对象的Mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16443801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com