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