完全披露:我對嘲笑和嘲諷框架非常陌生。我試圖使用ScalaMock,因爲它看起來像ScalaTest使用的'默認'模擬框架,但我很高興使用任何其他與ScalaTest兼容的框架。ScalaMock。模擬需要參數的類
問題:我在Scala中編寫了一個與套接字對話的類。這個類有一個類型參數,它與哪個套接字交談,其中一個參數是用於創建該類型套接字的工廠。它具有簽名:
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
工廠傳遞給我的掃描儀?我甚至無法解決如何模擬需要參數的類!
我是ScalaMock的作者。你使用哪個版本的Scala和哪個版本的ScalaMock? ScalaMock2與ScalaMock3的答案不同。 –
斯卡拉模擬3與斯卡拉2.10.0 – jangoolie