1

Specs2 を使用してファイルへのシリアル化をテストすることに成功しましたが、テストでは実際のファイル (/tmp/ に書き込まれます) を使用します。テストのためだけにディスクに触れたくありません。モックファイルを使用する方法はありますか?

def serializeAndDeserializeFromDatafile[X <: CaseClass : Manifest](old: X, maybeGrater: Option[AvroGrater[X]] = None): X = {
val g = maybeGrater.getOrElse(grater[X])

//val outfile = mock[File]
val outfile = new File("/tmp/file1.avro")   

g.serializeToDataFile(outfile, old)  //Serialize to file

val infile = outfile
g.asObjectFromDataFile(infile)       //Deserialize from file 
}

私は Mockito を使って私のoutfile(上記のコメントアウトされた行) をモックしようとしました。私の素朴な試みでは、を作成できますが、シリアル化しようとするとのMock for File, hashCode: 1583021903ようです。null

ある種の「スタブ」が欠けていると思いますが、解決策を提案するのに十分なほど類似した例が見つかりません。どんな助けでも大歓迎です。

4

3 に答える 3

2

私は、ファイル システム操作を幅広く扱うプログラム (Akka を使用して作成された自律プログラム) を持っています。java.io._(ネイティブの Java ライブラリクラスではなく) ScalaIO を使用して作成しました。ScalaIO には、とりわけ、RamFileSystemファイル システムや I/O システム コールを使用せずに、実際のファイル システム操作をミラーリングする方法で、ファイル システムの内容と操作をモックできる が含まれています。

于 2013-03-13T18:34:05.950 に答える
1

モックアウトすることはできますがFile、それは物事がうまくいくという意味ではありません。デフォルトでは、モックでメソッドを呼び出すと、返されますnull(またはint値の場合は 0 など)。

したがって、テストしている関数がいずれかのFileメソッドを呼び出す場合は、適切なデフォルト値を提供する必要があります。例えば:

val f = mock[File]

f.createNewFile returns true
f.isFile returns true
f.list returns Array("child1", "child2")

そうは言っても、あなたのgraterオブジェクトが実際に機能するファイルに書き込む必要がある場合、これを実際にモックすることは不可能かもしれません.

于 2013-03-13T12:24:55.447 に答える