完全な開示:私はモックとモックのフレームワークに非常に慣れていません。ScalaTestで使用する「デフォルト」のモックフレームワークのように見えたため、ScalaMockを使用しようとしていますが、ScalaTestと互換性のある他のフレームワークを使用できてうれしいです。
問題:私はScalaでソケットと通信するクラスを作成しました。このクラスには、通信するソケットの種類の型パラメーターがあり、その引数の1つは、その型のソケットを作成するためのファクトリです。署名があります:
class XScanner[T <: SocketClient](
confPath: String = "/etc/default/configPath",
socketClientFactory: String => T
) extends ScannerBase(path)
モックSocketClientを提供することで、このクラスの単体テストを記述できるようにしたいので、テストコードを実際のソケットに接続する必要はありませんが、ScalaMockでこれを行う方法を理解できません。
私のテストコードは次のようになります。
val t = new XScanner[SocketClient](confPath, (s: String) => mock[SocketClient])
明らかにSocketClient
、引数としてソケットへのパスを期待しているため、コンパイルされませんがmock[SocketClient(s)]
、それは型ではないため呼び出すことができずmock[SocketClient](s)
、モックは渡された型の引数を独自のものとして受け取らないため、呼び出すことができません引数。
SocketClient
では、スキャナーに渡すためのモックファクトリーを作成するにはどうすればよいですか?引数を取るクラスをモックする方法すら理解できません!