为的Mockito在斯卡拉对象(Mockito for Objects in Scala)

2019-09-02 06:24发布

我使用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.")

这是在单元测试一个非常简单的模仿。 为什么不工作?

谢谢!

Answer 1:

相反,它嘲笑的,你可以尝试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世界中,静态方法是嘲讽的祸根。 在斯卡拉世界,调用对象也可能是麻烦的处理单元测试。 但是,如果你按照上面的代码中,你应该能够正确地模拟出基于对象的依赖在你的类。



文章来源: Mockito for Objects in Scala