13

Scala 2.10、specs2、Mockito を使用しています。scala.io.Source.fromURL() をモックしたい。問題は fromURL() がio.Source の object の関数であるようです。

val m = mock[io.Source]
m.fromURL returns io.Source.fromString("Some random string.")

これは、単体テストでの非常に簡単なモックです。なぜ機能しないのですか?

ありがとう!

4

3 に答える 3

24

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 の世界では、オブジェクトの呼び出しも、単体テストで処理するのが面倒な場合があります。しかし、上記のコードに従えば、クラス内のオブジェクト ベースの依存関係を適切にモック アウトできるはずです。

于 2013-05-08T17:24:38.480 に答える