Divulgazione completa: sono molto nuovo per le strutture di derisione e derisione. Sto cercando di usare ScalaMock perché mi sembrava il framework di simulazione "predefinito" da utilizzare con ScalaTest, ma sono felice di utilizzare qualsiasi altro framework che sia compatibile con ScalaTest.ScalaMock. Mock una classe che prende argomenti
Il problema: ho scritto in Scala una classe che parla con un socket. La classe ha un parametro di tipo sul tipo di socket con cui parlare e uno degli argomenti è una factory per la creazione di socket di quel tipo. Ha la firma:
class XScanner[T <: SocketClient](
confPath: String = "/etc/default/configPath",
socketClientFactory: String => T
) extends ScannerBase(path)
mi piacerebbe essere in grado di scrivere unit test per questa classe, fornendo un SocketClient finto quindi il mio codice di prova non deve collegare ad una presa di vero e proprio, ma non può funzionare fuori come farlo con ScalaMock.
Il mio codice di prova è simile al seguente:
val t = new XScanner[SocketClient](confPath, (s: String) => mock[SocketClient])
Chiaramente che non compilerà perché SocketClient
aspetta un percorso alla presa come argomento, ma non posso chiamare mock[SocketClient(s)]
perché non è un tipo e posso 't chiamare mock[SocketClient](s)
perché mock non accetta gli argomenti del tipo passati come se fossero propri argomenti.
Quindi, come posso scrivere una simulazione di fabbrica SocketClient
per passare al mio scanner? Non riesco nemmeno a capire come prendere in giro una classe che prende argomenti!
Sono l'autore di ScalaMock. Quale versione di Scala e quale versione di ScalaMock stai usando? Le risposte sono diverse per ScalaMock2 rispetto a ScalaMock3. –
Scala Mock 3 con Scala 2.10.0 – jangoolie